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

javaの質問です。
数値を入力して、その数値が素数か素数でないか判定するプログラムで(無限ループ)、0を入力したら、その判定が終了するプログラム(ループ解除)という問題でそれらしいのは出たのですが、素数でない数字を入力した時、素数ですと素数でないです、両方が出力されます。
分かる方いましたら、教えてください。

A 回答 (3件)

以下で判定できます


0を入力すると終わります

import java.util.Scanner;
class WR7{

public static void main(String[] args){

Scanner sc=new Scanner(System.in);

int c=0;
System.out.print("数値:");
int fl=0;
while((c=sc.nextInt())!=0){

for(int i=2;i<c;i++){
if(c%i==0)fl=1;
}

System.out.println(fl==1 ? "素数ではない":"素数");
fl=0;
System.out.println();

System.out.print("数値:");

}



}

}
    • good
    • 0
この回答へのお礼

aは入力数値
For(int i=0;i<=a;i++)
If(a%i==0&&a==i)
なら素数
if(a==I)
なら素数でない
条件はこれであってますか??
ループの解除はwhile true文のブロックの中にbreak入れてできました。

お礼日時:2017/03/26 23:47

よく見てみましょう


その条件はfor文がi=0から始まっています
a%iした時、iが0だと0で割る行為になってエラーが出ます

また、i=1の時a%i==0はいつでもtrueになります
これでは素数かどうか判断できません
    • good
    • 0

実際のプログラムを見ないと、回答はできませんが、


「あなたの思った通りのプログラムを書けていない」
のは確実です。

デバッガで動作を追い掛けるとか、

For(int i=0;i<=a;i++) {
System.out.println("ループ開始 " + i) ;
System.out.println("a%i= " + (a%i)) ;
..
If(a%i==0&&a==i) {
System.out.println("条件1成立") ;
}
...

等と要所に現在の状況を出力するようにして、
「私はこう動くと信じている」
ということと
「実際に、コンピュータはこう動いている」
との違いを見つけましょう


> For(int i=0;i<=a;i++)
> If(a%i==0&&a==i)
> なら素数
> if(a==I)
> なら素数でない

すくなくとも i=0 の時点でエラーになるので、
このプログラムは何の参考にもなりません
    • good
    • 0

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