• 締切済み

助けてください

10は偶数で5の倍数です。 11は素数です。 12は偶数で6の倍数です。 13は素数です。 14は偶数で7の倍数です。 15は奇数で5の倍数です。 16は偶数で8の倍数です。 17は素数です。 18は偶数で9の倍数です。 19は素数です。 20は偶数で10の倍数です。 と出力させたいのですが、 H:\>java SuuNoSyurui 11は奇数で0の倍数です。 12は偶数で0の倍数です。 13は奇数で0の倍数です。 14は偶数で0の倍数です。 15は奇数で0の倍数です。 15は素数です。 16は偶数で0の倍数です。 17は奇数で0の倍数です。 17は素数です。 18は偶数で0の倍数です。 19は奇数で0の倍数です。 19は素数です。 20は偶数で0の倍数です。 -- Press any key to exit (Input "c" to continue) -- こうでてしまいます。 下のが立てたプログラムです。 public class SuuNoSyurui { public static void main(String[] args) { int i=1,j=2; int n1=10; int n2=20; int n=n2-n1; int baisu=0; for(i=1;i<=n;i++) { if (i%2==0){ System.out.println("\t"+(i+n)+"は偶数で"+baisu+"の倍数です。"); } else { System.out.println("\t"+(i+n)+"は奇数で"+baisu+"の倍数です。"); } for(j=3;j<=(i-2);j +=2) { if (((i-2)%j==0) && ((i-2)%2)==1){ System.out.println("\t"+(i+n)+"は素数です。"); } } } } }

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

みんなの回答

回答No.5

言語は違いますが考え方の参考にしてください。 テスト済みです。 var aa, bb ,i , m : Integer ; flg, flg2 : Boolean ; begin aa := StrToInt(Edit1.Text) ; //文字列を数値に変換 flg := False ; //フラグのクリア flg2 := False ; bb := aa mod 2 ; //偶数、奇数の判断 if bb = 0 then flg2 := True ;//偶数だったらTrue for i := aa - 1 downto 2 do begin //aaから2までデクリメント m := aa mod i ; //余りを求める if m = 0 //余りが0だったら then begin flg := True ; //割り切れた if flg2 = True //偶数だったら then Label1.Caption := Edit1.Text + ' は偶数で ' + IntToStr(i) + 'の倍数' else Label1.Caption := Edit1.Text + ' は奇数で ' + IntToStr(i) + 'の倍数'; Break ; //for ループを抜ける end; end; if flg = False //最後まで余りが出ていた then Label1.Caption := Edit1.Text + ' は ' + '素数' ; end; エラー処理は考えてください。

noname#119918
noname#119918
回答No.4

main関数内で何もかも済ませようとするため 無理が生じるのだと思います。 処理は細かくわけて、問題を少しずつ解決しましょう。 例えば、私は以下のようにコーディングしました。 class SuuNoSyurui { public static void main(String args []) { int begin = 10; int end = 20; for(int i=begin ; i<=end ; i++) { judge(i); } } // 数の種類を判定 private static void judge(int num) { if(num % 2 == 0) { System.out.println(num + "は偶数で" + num/2 + "の倍数です"); } else { int div = maxDivisor(num); if(div == 1) { System.out.println(num + "は素数です"); } else { System.out.println(num + "は奇数で" + div + "の倍数です"); } } } // 自身を除く、最大の約数を返す private static int maxDivisor(int num) { for(int i=num/2 ; i>=1 ; i--) { if(num % i == 0) { return i; } } // ここに来ることは無いはずですが return 1; } }

  • seasoning
  • ベストアンサー率25% (182/713)
回答No.3

突っ込みどころが多すぎて。。。 コーディングミスも多いけど、言語とか関係なく、そもそもの処理の流れが理解できてないっぽいです。 まずは、フローチャートを書きましょう。 次にコーディングの基本を学びましょう。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

いやもう何もかもが間違っているとしか言いようが無いです。 この問題を解く前に入門書の1冊2冊でも買って、基礎の基礎を勉強しましょう。

  • Ceren
  • ベストアンサー率49% (90/183)
回答No.1

「i」について評価した結果を「i+n」の評価結果として表示しているのがそもそも誤りなのでは?

関連するQ&A

  • JAVAで素数判定

    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; } } --結果---------------------------------------------- 素数です

    • ベストアンサー
    • Java
  • JAVAのfor文で困っています。

    JAVAの勉強をしていますが、本の練習問題でわからなくて困っています。for文で以下の処理を行いたいです(do,whileはなしです)が、 *を5個ごとに改行したいのですが、改行してくれません。 問題の部分↓ if (n % 5 == 0) System.out.println(); 何か良い方法はありませんか?お願いします。 ------------------------------------------------- //(数を読み込んで)だ個数だけ * を5個ごと改行しながら表示 int n = 0; for (int i = n; n <= 0;){ System.out.print("何個*を表示しますか : "); n = stdIn.nextInt(); } for (int i = 1; i <= n; i++){ System.out.print("*"); if (n % 5 == 0) System.out.println(); } ------------------------------------------------

    • ベストアンサー
    • Java
  • ゴールドバッハの予想についてのプログラムなんですが・・・

     ゴールドバッハの予想(4以上の任意の偶数は,2つの素数の和で表せる)を表すJavaプログラムです。 ---------------------------------------------------------------- public class Gold { static int prime(int number){ int count=0; for(int i=1; i<=number; i+=2){ if(number%i==0) count++; } return count; } public static void main(String[] args) { long start = System.currentTimeMillis(); int n, p; //System.out.println("4=2+2"); for(n=6; n<100000; n+=2){ for(p=2; p<n; p++){ if(prime(p)==2 && prime(n-p)==2){ //System.out.println(n + "=" + p + "+" + (n-p)); break; } } if(p==n){ //System.out.println("この予想は間違いと判明!"); break; } if(n%1000==0){ long stop = System.currentTimeMillis(); System.out.println(n + " " + (stop-start)); } } } } ---------------------------------------------------------------- 『for(int i=1; i<=number; i++){ のループ、number まで回しているのが無駄である。素数判定は 2 以上、√number 以下の整数で割り切れれば素数でないのでループの上限は√number で良い。number まで回す必要はなく、i で割り切れた時点で prime=1 として 飛び出せばよい。ループを回り終わっても割り切れていなければ prime=2 で出る。』というコメントを、上に書いたプログラムを変更して表すにはどうしたら良いのですか?? 誰か教えて下さい(*_*) お願いします★

    • ベストアンサー
    • Java
  • ゴールドバッハの予想について・・・

     ゴールドバッハの予想(4以上の任意の偶数は,2つの素数の和で表せる)を表すJavaプログラムを作りたいのですが、できるだけ計算経過時間を短縮したいんです。  下のプログラムを改善して、計算経過時間が速くなるようにして下さい。  どういう理由で改善したのかも付け加えてくれると嬉しいです。 -------------------------------------------------------------------------------------------------------------------------------- public class Gold { static int prime(int number){ int count=0; for(int i=1; i<=number; i++){ if(number%i==0) count++; } return count; } public static void main(String[] args) { long start = System.currentTimeMillis(); int n, p; for(n=4; n<100000; n+=2){ for(p=2; p<n; p++){ if(prime(p)==2 && prime(n-p)==2){ System.out.println(n + "=" + p + "+" + (n-p)); break; } } if(p==n){ System.out.println("この予想は間違いと判明!"); break; } if(n%1000==0){ long stop = System.currentTimeMillis(); System.out.println(n + " " + (stop-start)); } } } } --------------------------------------------------------------------------------------------------------------------------------

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

    public class Gold1 { static int prime(int number){ int count=0; for(int i=2; i<number; i+=2){ if(number%i==0) count++; } return count; } public static void main(String[] args) { long start = System.currentTimeMillis(); int n, p; //System.out.println("4=2+2"); for(n=6; n<=100000; n+=2){ for(p=2; p<n; p++){ if(prime(p)==2 && prime(n-p)==2){ //System.out.println(n + "=" + p + "+" + (n-p)); break; } } if(p==n){ //System.out.println("この予想は間違いと判明!"); break; } if(n%1000==0){ long stop = System.currentTimeMillis(); System.out.println(n + " " + (stop-start)); } } } } ---------------------------------------------------------------- この上のプログラムの一部を ---------------------------------------------------------------- if(prime(p)==0 && prime(n-p)==0){ //System.out.println(n + "=" + p + "+" + (n-p)); break; } ---------------------------------------------------------------- というふうに変えたらどういう意味があるのですか??

    • ベストアンサー
    • Java
  • 要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

    JAVAの練習問題でわからなくて困っています 以下は線形探索のプログラムで、このプログラムを改良して、 要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。 以下のような簡単なプログラムでできる方法で行いたいです。 どなたか答えまたはヒントを下さい、お願いします。 ------------------------------------------------------------ import java.util.Random; import java.util.Scanner; public static void main (String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); final int n = 10; //要素数 int[] a = new int[n]; //配列を宣言 for (int j = 0; j < n;) a[j] = rand.nextInt(10); System.out.print("配列aの全要素の値\n{ "); for (int j = 0; j < n; j++) System.out.print(a[j] + " "); System.out.println("}"); System.out.print("探す数値 : "); int key = stdIn.nextInt(); int i; for (i = 0; i < n; i++) if (a[i] == key) break; if (i < n) //探索成功 System.out.println("それはa[" + i + "]にあります。"); else //探索失敗 System.out.println("それはありません。"); } }

  • 例外処理について

    続けて質問です…すみません; public class OddEven { private static boolean even(int k) { return k/2*2 == k; } public static void main(String[] args){ int l; int m=0; int n=0; try{ for(l=0;l<args.length; l++) { int a = Integer.parseInt(args[k]); if(even(a)) { m++; } else{ n++; } } }catch (NumberFormatException e) { System.out.println("<" + e + ">"); } System.out.println("Even = " + m); System.out.println("Odd = " + n); } } とし、例えば「1 2 3 a 5」の中の偶数奇数の個数を判定すると、奇数が2個、偶数が1個となり、例外処理されたaの後の5が奇数にカウントされないのですが、どのように修正すればよろしいのでしょうか?

    • ベストアンサー
    • Java
  • JAVAの質問です。

    JAVAの質問です。 javaでスロットを作りたいのですが…。 3行3列で縦と横同じ数字の場合”おめでとう”と表示されるプログラムを作りたいのですがわからないです。 助けてください(>_<) public class surotto { public static void main(String args[]) { int hako[][]; int i,j; hako = new int[3][3]; System.out.println("スロットスタート。"); for(i=; i<3; i++){ for(j=0; j<3; j++){ hako[i][j] = (int)(Math.random()*10); } } for(i=0; i<3; i++){ for(j=0;j<3;j++){ System.out.println([i][j]); } System.out.println("\r\n"); } for(i=0; i<3 ; i++){ if((hako[i][0] == hako[i][1]) && (hako[i][1] == hako[i][2])){ System.out.println("横がそろいました、おめでとう\n"); } } for(j=0; j<3 ; j++){ if((hako[0][j] == hako[1][j]) && (hako[1][j] == hako[2][j])){ System.out.println("縦がそろいました、おめでとう\n"); } }

    • ベストアンサー
    • Java
  • javaの二次元配列について質問です

    配列上にあるただ一つの1を入力に応じて移動させるプログラムを作っています。 たとえば0が入力されたら 0, 0, 0 0, 1, 0 0, 1, 0 → 0, 0, 0 0, 0, 0 0, 0, 0 という風に移動させ、端に行ったら移動できないようにしたいです。 今書いたプログラムだと、最初にある1が残ったままになってしまいます。 int[] p = {-1, -1}; int[][] im = new int[3][3]; Scanner scn = new Scanner(System.in); for (int i = 0; i < p.length; i++) { p[i] = 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); } int n = 0; n = scn.nextInt(); if (n == 0) { p[0] -= 1; } else if (n == 1) { p[1] += 1; } else if (n == 2) { p[0] += 1; } else if (n == 3) { p[1] -= 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); }

  • 多次元配列の処理について

    多次元配列を扱った処理を行ないたいのですが、一部でnullを受け取ってしまい、処理を行うことができません。 引数の配列には次のようなテキストが入っています。 --配列の内容-- 0,名詞-一般,1,5, 0,名詞-数,2,6, 0,名詞-接尾-助数詞,3,7, -------------- この配列をコマンドラインに書き出すと正確に表示されます。 しかし、配列の内容を参照して処理を行なうと2列目の処理のときにnullを参照してしまいます。 プログラムは以下のとおりです。 ---プログラム--- public class Dist {   public static int zairyo(String[][] date) {    int a = 0;    int b = 0;    int c = 0;    int d = 0;    int e = 0;    if(date != null) {     int f = 0;     System.out.println("//Dist//");     for(int m = 0; m < date.length; m++) {      for(int n = 0; n < date[0].length; n++) {       if(date[m][n] != null) {        System.out.print(date[m][n] + "\t");        f++;        if(f == date[0].length) {         System.out.println("");         f = 0;        }       }      }     }     for(int i = 0; i < date.length; i++) {      if(date[i][1] != null) {       if(date[i][1] == "名詞-一般")        a++;       if(date[i][1] == "名詞-数")        b++;       if(date[i][1] == "名詞-接尾-助数詞")        c++;      }else System.out.println("2列目null");     }     int j = date.length - 1;     d = Integer.parseInt(date[j][2]);     e = Integer.parseInt(date[j][3]);    }else System.out.println("Dist:null");    if(a > 0 && b > 0 && c > 0 && d <= 10 && e <= 15) {     return 1;    }else return 0;   } } ------------------------ 原因は何なのでしょうか? ご教授お願いします。

専門家に質問してみよう