質問するログイン新規登録
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

2860閲覧

processing 関数 エラー原因

albertadam

総合スコア11

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/05/20 13:40

編集2019/05/20 13:44

0

0

習いたてなのですが、関数が苦手です。
教えてください。

void setup(){
noLoop();
}

int bigger(int m,int n){ //ここのエラーの原因教えてください。

if(m>=n){
return m;
}
if(m<n){
return n;
}
}

void draw(){
println(bigger(10,20));
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2019/05/20 13:55

なんてエラーでてます?
guest

回答1

0

ベストアンサー

biggerの行をマウスクリックすると以下のようなエラーメッセージが表示されます。

This method must return a result of type int

まずこのメッセージの意味を把握してください。プログラミングをするなら英語や専門用語に慣れなければいけません。そうでないとプログラミングは事実上不可能です。完全に読めなくても意味が掴めればとりあえずよしです。

エラーメッセージの意味は「このメソッド(biggerのこと)はint型の結果を戻さなければなりません」です。int型の値をreturn文によって戻してないよといってるわけです。

しかし・・・

processing

1int bigger(int m,int n) { 2 if (m >= n) { 3 return m; 4 } 5 if (m < n) { 6 return n; 7 } 8}

mかnをちゃんとreturnしているように見えます。ところがProcessingは「必ずどちらかの条件は成立する」とは認識してくれない(認識できるようにプログラムされていない)です。

そのため、Processingが「必ずint値をリターンしている」と容易に認識できるような書き方をしなければなりません。その書き方とは次のようなものになります。

processing

1int bigger(int m,int n) { 2 if (m >= n) { // (1) 3 return m; 4 } 5 return n; // (1)が不成立でもここで必ずreturnすればProcessingは満足する 6} 7 8// または 9 10int bigger(int m,int n) { 11 if (m >= n) { // (1) 12 return m; 13 } else { // (2) 14 return n; // (1)が不成立の時必ず(2)のelse節が実行されるはずということはProcessin 15 // にも把握できる。 16 } 17}

最初は言語処理プログラムが「どこまで賢いか」がわかりにくいと思います。数学的には正しくても言語処理プログラムがそれを理解してくれるとは限りません(大抵は理解してくれないです)。そのため計算機の把握力に寄り添って記述する方法(コツ)を覚えねばなりません。このあたりは一種の慣れだと思います。

投稿2019/05/20 16:17

KSwordOfHaste

総合スコア18404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2019/05/20 22:44

あるいは if (m >= n) { return m; } else { return n; } でもいいかも。 少なくとも、m>=nの条件を満たさなかったら必ずn<mなので、そこを改めてifで検査するのは無駄ですから。
KSwordOfHaste

2019/05/21 01:05 編集

その論理も回答に載せています。teratailのコード用のマークダウンは一定以上の行数があると折りたたまれ、下の方に表示されている青色のVマークをクリックしないと全部見えませんのでご注意を。 > 改めてifで検査するのは無駄 上の回答では数学的な正しさとコンパイラーが判断できる正しさの違いに視点を置いて回答をしてみました。普段コードを書くときには確かに「改めて検査するのは無駄」という意識の方が強く働きますね。
albertadam

2019/05/21 01:32

丁寧に答えていただき、ありがとうございます!
thkana

2019/05/21 14:01

ちゃんと見てなかった...失礼いたしました。 「無駄」のほうは、この程度ならかわいいですけど、 if(80<a){ }else if(a<=80 && a<50){ }else if(a<=50 && a<30){ なんて頑張ってるのをよくみるもので。ちょっと過剰反応だったかも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問