- ベストアンサー
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以上なのにあたりが付かない時があります。 どなたか教えていただけないでしょうか?
- みんなの回答 (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)
変数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)
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); } }