- 締切済み
助けてください
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)+"は素数です。"); } } } } }
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tontibo310
- ベストアンサー率42% (6/14)
言語は違いますが考え方の参考にしてください。 テスト済みです。 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; エラー処理は考えてください。
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)
突っ込みどころが多すぎて。。。 コーディングミスも多いけど、言語とか関係なく、そもそもの処理の流れが理解できてないっぽいです。 まずは、フローチャートを書きましょう。 次にコーディングの基本を学びましょう。
- bgbg
- ベストアンサー率53% (94/175)
いやもう何もかもが間違っているとしか言いようが無いです。 この問題を解く前に入門書の1冊2冊でも買って、基礎の基礎を勉強しましょう。
- Ceren
- ベストアンサー率49% (90/183)
「i」について評価した結果を「i+n」の評価結果として表示しているのがそもそも誤りなのでは?