プロが教えるわが家の防犯対策術!

JAVAの勉強をしてます
練習問題で、素数判定のプログラムをしているのですが。

1~14までの判定はうまくいきますが、15の判定の時に素数であると表示されて困ってます。どなたかわかりませんか?

//読み込んだ数字 n が 15 の場合

if(n == 1)
System.out.println("素数ではありません。");
if(n == 2)
System.out.println("素数です。");

for (int i = 2; i < n; i++) {
if (n % i == 0) {
System.out.println("素数ではありません。");
break;
} else {
System.out.println("素数です。");
break;
}
}

--結果----------------------------------------------
素数です

A 回答 (4件)

 簡単に直すには、判定と出力のロジックを分ければよいのです。


 for分のところだけ

boolean issosu = true;
for (int i=2; i<n ; i++) {
 if (n % i == 0) {
  issosu = false;
  break;
 }
}

if (issosu) {
 System.out.println("素数です。");
} else {
 System.out.println("素数ではありません。");
}
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。

boolean型の変数まだ使ったことがなかったので、その方法は思いつきませんでした。

無事解決しました。

お礼日時:2008/12/26 19:38

if文の中が真だろうが偽だろうがbreakに行っちゃいますね。


for文が全てのiについて余りが0でなかったら"素数です"と表示するように直せば良さそうですね。

この回答への補足

ご回答ありがとうございます。
違いがわかりました、素数でないときにのみbreakで抜けれるようにしましたが、
結果だけを表示するにはどのようにしたらいいでしょうか。

if(n == 1)
System.out.println("素数ではありません。");
if(n == 2)
System.out.println("素数です。");

for (int i = 2; i < n; i++) {
if (n % i == 0) {
System.out.println("素数ではありません。");
break;
} else {
System.out.print("");
}
}
System.out.println("素数です。");

補足日時:2008/12/26 19:02
    • good
    • 3

繰り返しのiで割ったあまりが0なら素数ではない、というのは正しい。

が、逆に「あまりが0でなければ素数」ではない。

「すべての繰り返しで、あまりが0でない」場合が、素数だ。違いがわかるだろうか?

この回答への補足

ご回答ありがとうございます。
違いがわかりました、以下のように変更してみましたが、素数でないときはすぐにbreakで抜けれますが、
結果だけを表示するにはどのようにしたらいいでしょうか。

if(n == 1)
System.out.println("素数ではありません。");
if(n == 2)
System.out.println("素数です。");

for (int i = 2; i < n; i++) {
if (n % i == 0) {
System.out.println("素数ではありません。");
break;
} else {
System.out.print("");
}
}
System.out.println("素数です。");

補足日時:2008/12/26 19:01
    • good
    • 0

このプログラムは、「9」の時も「素数です」と表示しませんか?


(っていうか、3以上の奇数の時必ず「素数です」と表示しませんか?)

for文の中のif文で真の時も偽の時もbreak文が付いているから、一回しか実行されない。つまり、2で割り切れるかどうかしか判定していない。

ちがってたら、ごめんね~!
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。

2で割り切れるかどうかしか判定していませんでした。
ループする前にbreakで抜けてようです。

お礼日時:2008/12/26 18:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!