Javaの学習を始めて数週間の初心者です。 皆さんのお知恵を貸してください。 条件分岐、ループ、配列、メソッドを使用したプログラムを作成する、 という課題です。習っただけでなく自分でちゃんと使えるか、という意図だと思います。 素数を判定するプログラムにしようと考えました(もっと単純なもので構わないのですが、思いつかなかった…)。 ネットを検索して考え方を参考にしながら、書いてみました(コピペではないです)。 不細工で読みにくいかもしれませんがよろしくお願いします。 概要(問題のソースは最下部) ・キーボードで3つの数字を入力し、それらを配列numに代入する(readLine使用)。[メソッド][配列] ・(ここからペーストしたソース)配列をfor文で足し込み合計値をsumに代入。[ループ] ・2以上とそれ以外に分ける(素数は2~)。[条件分岐] ・2以上、sum未満の数で順番に割っていく。 ・1回でも割り切れたらboolean型sosuにfalseを代入、処理を終了させる。 (ここには載っていませんが、sosuはtrueで初期化済み) ・sosuがtrueかfalseかで表示を変える。 とりあえずソースを書いてコンパイルも通り、実行した結果も一応私の意図通りに動きます。。 が、これを講師の方に動きを説明しないといけません。一つ一つの動きは理解できるのですが、 ifの入れ子のブロックで処理がどう移っていくのかが不明瞭です。 お訊きしたいのは以下のケースで処理がどう動くのか、です。理由もお願いします。 (1)2つ目のfor文、1回目でfalseの場合(例えばsumが2の時) …2の場合、「素数です」と表示されますが、改めて読むと「elseに飛んでsosu = falseになるのでは?」 という疑問があります。具体的な内容を伏せて講師の方に訊いてみると「上のif文でtrueになっても その下のfor文でfalseならばelseに飛ぶはず」と言われました。 (2)2つ目のif文、falseになった場合 …この場合、falseなら素数と判定された、と思っていて実行結果もそのようになるのですが、 「elseに飛ぶ、が正しいならおかしくないかな?」と感じます。 (3)breakの後 …大体上と同じ疑問です。 (4)要は入れ子になっている場合、どこに処理が移るかがちゃんと解っていないのだと思います。 このような場合の読み方のアドバイスをお願いします。 情報に不足があればご指摘ください。 ↓ここからソース↓ (略) System.out.println("※合計値はint型の範囲内になるよう注意してください。"); (略) int sum = 0; for (int i = 0; i < num.length; i++) { sum += num[i]; } if (sum >= 2) { for (int i = 2; i < sum; i++) { if (sum % i == 0) { sosu = false; break; } } } else { sosu = false; } if (sosu == true) { System.out.println("\n合計値" + sum + "は素数です。"); } else { System.out.println("\n合計値" + sum + "は素数ではありません。"); } (以下略)
↧