javaで素数判断プログラム作成しましたが…

このQ&Aのポイント
  • javaで素数判断プログラム作成しましたが,うまく動きません。5行目のint j=1;をint j=2;に変更すれば綺麗に動くのですが,j=1からスタートすると何も表示されずに処理が終わってしまいます。なぜでしょうか。
  • 質問内容は、javaで作成した素数判断プログラムがうまく動かない理由についてです。具体的には、変数jの初期値を1から2に変更すると正しく動作することに気付きましたが、なぜ1からではなく2からスタートする必要があるのか疑問です。
  • 素数判断プログラムの作成に関する質問です。現在、javaで素数判断プログラムを作成しているのですが、変数jの初期値を1から2に変更すると正しく動作することに気付きました。しかし、何故1からではなく2からスタートする必要があるのかが分かりません。教えていただけますでしょうか。
回答を見る
  • ベストアンサー

javaで素数判断プログラム作成しましたが…,

javaで素数判断プログラム作成しましたが,うまく動きません。 以下のように作成しました。 5行目のint j=1;をint j=2;に変更すれば綺麗に動くのですが,j=1からスタートすると何も表示されずに処理が終わってしまいます。 なぜでしょうか。 お手すきの時で構いませんので教えて頂けませんでしょうか? class PrimeNum{ public static void main(String[] args){ int i=2; while(i<100){ int j=1; while(j <= i){ if(i%j==0){ if((i/j) != 1 ){ j=i+1; } if(i==j){ System.out.print(i+" "); } } j++; } i++; } } }

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

iが2以上,j=1ならば, if(i%j==0){ の結果はいつも0なので真。 if((i/j) != 1 ){ の結果はいつも2以上なので真であり,j=i+1が実行される。 j=i+1が実行されたなら if(i==j){ は偽となり,System.out.printは実行されない。 さらにj++されるのでjの値はi+2の計算結果となり, while(j <= i){ は偽になるのでwhileループは終了する。 class PrimeNum { public static void main(String[] args){ for (int i = 2; i < 100; i++) { int j; for (j = 2; j < i; j++) { if (i % j == 0) { break; } } if (i == j) { System.out.print(i + " "); } } } }

onaka_suitashi
質問者

お礼

ありがとうございます☆彡

関連するQ&A

  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • javaで素数を探すプログラム。

    javaで素数を探すプログラム。 初歩的なことかと思いますが、助言をお願いします。 if(a[i-1]) ←この部分がわかりません。これはどのような条件がなのでしょうか? class Prime { public static void main(String[] args) { int max = 100; // 素数を探す数の最大値 boolean[] a = new boolean[max]; // 素数かどうか判定する配列 // 配列の初期化 for(int i = 0; i < max; i++) a[i] = true; // 素数かどうか判定 for(int i = 2; i < max; i++) { if(a[i-1]) { for(int j = 2; i*j <= max; j++) a[i * j - 1] = false; } else continue; } // 結果を表示 for(int i = 1; i < max; i++) { if(a[i]) System.out.print((i + 1) + " "); } System.out.println(); } } このプログラム

    • ベストアンサー
    • Java
  • Javaのプログラムについて教えて下さい

    //Sample.java class Sample void methodA(int temp) if(temp == 0) String str = new String("Exception"); Integer.parseInt(str); else if(temp == 1) int[] array = new int[temp]; else Exception exc = new Exception(); throw exc; //SampleMain.java class ExceptionMain public static void main(string[] args) Sample sam = new Sample(); Int temp = Integer.parseInt(args[0]); Sam.method(temp); } } このプログラムの場合、ExceptionMainに新たにコードを加えて、コマンドライン引数が0,1,その他の場合に例外メッセージを出力するプログラムを教えて下さい。

    • ベストアンサー
    • Java
  • java ネストしたfor文について

    ***** **** *** ** * 上のように*が減るようにしたいのですが下のソースではどこが悪いか教えてください class TestGoo{ public static void main(String args[]){ for(int i = 5; i>=1; i--){ for(int j = 5;j>=1; j--){ System.out.print('*'); } System.out.println(); } } }

  • javaのプログラムに関する質問

    * 入力された数値の数だけ、"*"を表示するメソッド * displayAsterメソッドを作成して下さい。 */ public class MethodAdd3 { public static void main(String[] args){ // 入力された数字をint型の数値に変換 int iInput = Integer.parseInt(args[0]); // displayAsterメソッドの呼び出し displayAster(iInput); } // ここにdisplayAsterメソッドを作成 public static void displayAster(int iInput1){ for(i=0; i<iInput1; i++){ System.out.print("*"); } System.out.println(""); } ここまで出来たのですが、コンパイルエラーになってしまいます。 考え方かヒントなど、知恵をお貸しください。

  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • Javaについて教えてください。

    Javaのソースコードで以下のコードを実行すると表示されないのですがなぜでしょうか? public class Sample{ public static void main(String[] args){ for (int i = 0 ; i >= 5; i++){ System.out.println(i); } } }

  • Javaの初歩的なプログラムについて

    public class ForInFor{ public static void main(String[] args){ for(int i=1; i<=9; i++){ String a = ""; for(int j=1; j<=9; j++){ a += i * j + " "; } System.out.println(a); } } } を実行すると九九の表のようになりました。 println(a)の中のaはjの方のforの繰り返しが終わったら代入するものだと思っていましたので 戸惑っています。 実際にはどういう流れで九九の表ができるのでしょうか?

  • javaのプログラム

    int型の配列の各要素に1~10の乱数を代入し、各要素の値を縦向きの*のグラフで表示するプログラムを作っているのですが、結果がランダムででるので、自分の書いたプログラムが正しいのかわかりません。ソースを載せますので合っているのか間違っているか教えて下さい。もし間違っているならどこが間違いなのか教えていただけると嬉しいです。よろしくお願いします。 ●ソース import java.util.Random; import java.util.Scanner; class Graph { public static void main(String[] args){ Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数:"); int n = stdIn.nextInt(); int a[] = new int[n]; for (int i = 0; i < n; i++) a[i] = 1 + rand.nextInt(10); for (int i = 1; i <= 10; i++){ for (int j = 0; j < n; j++) if (a[j] <= i) System.out.print("* "); else System.out.print(" "); System.out.println(); } } } ●実行例 要素数:12 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    • ベストアンサー
    • Java
  • Javaに関する初歩的な質問です。

    Javaを勉強中なのですが、 class Test{ public static void main(String args[]){ int a = 10; { int a = 10; } } } これがエラーになる理由がいまいちわかりません。 ぜひとも教えてください。

専門家に質問してみよう