質問: 0) { return; } } System.out.println(prime + "は素数です"); } public static void main(String[] args) { } } ```
回答: 基本的には、cateyeさんの回答にある > > 判定を抜ける時に渡した数値が素数だった場合に、それを呼び出し側が判別できなくてはいけません。 > > > をする必要があります。 具体的には、以下のAとBのどちらを通過したかを通知する仕組みが必要 ``` public void primes(int prime) { for(int i = 2; i < prime; i++) { if(prime % i == 0) { // A return; } } // B System.out.println(prime + "は素数です"); } ``` 1. ~~Staticな~~変数に素数の数を保存する(Staticじゃなくても良かった) 2. 関数の戻り値に素数判定した回数を設定する(primes側でカウント) 3. 関数に戻り値を設定して素数かわかるようにして(main側でカウントする) 3番目がたぶん一般的です。 ``` private static int cnt = 0; public void primes1(int prime) { for(int i = 2; i < prime; i++) { if(prime % i == 0) { // A return; } } // B cnt++; System.out.println(prime + "は素数です"); } // cnt = primes2(n, cnt); public int primes2(int prime, int cnt) { for(int i = 2; i < prime; i++) { if(prime % i == 0) { // A return cnt; } } // B System.out.println(prime + "は素数です"); return cnt + 1; } // if (primes3a(n)) cnt++; public boolean primes3a(int prime) { for(int i = 2; i < prime; i++) { if(prime % i == 0) { // A return false; } } // B System.out.println(prime + "は素数です"); return true; } // cnt += primes3b(n); // n が素数の場合、+1される public int primes3b(int prime) { for(int i = 2; i < prime; i++) { if(prime % i == 0) { // A return 0; } } // B System.out.println(prime + "は素数です"); return 1; } ``` というメソッドになっていれば、main側で素数と判定された回数がわかります。