• ベストアンサー

Java eclipse for文の乱数

for文で10までの乱数を5個表示し、6以上の場合は数値と一緒にあたりと表示せよという問題で int a; for(a=0;a<=10;a++){ a=(int)(Math.random()*10); System.out.println(a); if(a>=6){ System.out.println(a+" あたり"); } } で結果が 6 あたり 4 3 5 7 7 あたり 0 ・・・ のようになり、無限に続くし、6以上なのにあたりが付かない時があります。 どなたか教えていただけないでしょうか?

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>for文で10までの乱数を5個表示し、6以上の場合は数値と一緒にあたりと表示せよという問題で -----------ここから----------- int a; for(a=0;a<=10;a++){ // 一般的にはfor(int i=0;i<5;i++){ として乱数を代入するaと区別する // 5個の乱数を発生させるので i=0~4 とする a=(int)(Math.random()*10); System.out.println(a); // a=7 のとき、7 と改行を出力する if(a>=6){ System.out.println(a+" あたり"); // a=7 のとき 7 あたり と改行を出力する } } -----------ここまで----------- >無限に続くし、6以上なのにあたりが付かない時があります。 前述のようにループ回数を数える変数と乱数を代入する変数を区別しないとループを抜け出すタイミングが不定となります。(無限ループの原因) また、結果の"7"と"7 あたり"が連続しているのは System.out.println(a); と System.out.println(a+" あたり"); が関わっています。 int a; for(int i=1;i<6;i++){ a=(int)(Math.random()*10); System.out.print(a); // aの値のみ出力する(改行無し) if(a>=6){ System.out.print(" あたり"); // " あたり"の文字列のみ出力する(改行無し) } System.out.println(); // 改行のみ出力する }

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

変数aをループと乱数を受けるのと兼用しているのはなぜですか? >a=(int)(Math.random()*10); aは0~9の数値になり >for(a=0;a<=10;a++){ a++で1~10で a<=10 の条件を満たしますからループが続きます。 延々この状態ですから無限ループになるのは当然です。 >のようになり、無限に続くし、6以上なのにあたりが付かない時があります。 System.out.println(a); で常にaの数値だけ出力していますよ?

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.1

int a; for(a=0;a<=10;a++){ a=(int)(Math.random()*10); if(a>=6){ System.out.println(a+" あたり"); else System.out.println(a); } }

関連するQ&A