前提・実現したいこと
ここに質問の内容を詳しく書いてください。
java でランダムに1~6の数字を20回出現させ、その出現した数分を「+」で表現したい。
例)
1:+++
2:++
3:++++
4:+++
5:+++++
6:+++
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
途中までですが、とりあえず1の数を「+」で表示したいのに
1:1:1
と、表示され「+」の表示できません。
初心者で申し訳ないのですがご教授頂ければ幸いです。
エラーメッセージ
### 該当のソースコード java ソースコード for (int i=0; i<20; i++){ int dice =rand.nextInt(6) + 1; int num1 =0; if(dice==1){ num1++; System.out.print("1:"); for(int g =1;g<num1;g++){ System.out.print("+"); } } } } } ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ランダムに1~6の数字を20回出現させ、その出現した数分を「+」で表現したい。
それぞれの目の頻度を+で表示するんですよね?
1だけならこうですね。(書く場所を入れ替えただけ)
Java
1import java.util.Random; 2 3class Main { 4 public static void main(String[] args) { 5 Random rand = new Random(); 6 int num1 = 0; 7 for (int i = 0; i < 20; i++) { 8 int dice = rand.nextInt(6) + 1; 9 if (dice == 1) { 10 num1++; 11 } 12 } 13 14 System.out.print("1:"); 15 for (int g = 0; g < num1; g++) { 16 System.out.print("+"); 17 } 18 System.out.println(); 19 } 20}
6個ならnum2、num3とやっていってもいいですが、配列を使うとスッキリ書けます。
投稿2020/06/13 03:44
総合スコア9862
0
ベストアンサー
追記で修正しました:
私の最初の回答は題意を間違えていましたね。20回サイコロを振って、1~6の目についてそれぞれ何回出たかを集計するのが目的の問題でした。修正したものを追記させていただきました。すみません、これは低評価も止む無し、です。
当初の回答(※誤ったもの)
途中までですが、とりあえず1の数を「+」で表示したいのに
1:1:1
と、表示され「+」の表示できません。
とりあえず書いても要望通りには動きません。このレベルでしたら初心者とかあまり関係ありません。落ち着いて考えてみましょう。
if (dice == 1) {...}
などとしてしまったら、サイコロの出た目が1の場合しか出力しないと思いませんか。まず、Javaから離れて頭の中、必要なら手を使って紙に書いて考えてみましょう。サイコロの出た目、そのままの回数で+
を出力すれば良いということが分かると思います。
Java
1import java.util.Random; 2 3public class t7 { 4 public static void main(String[] args) { 5 Random rand = new Random(); 6 for (int i = 1; i <= 20; i++) { 7 // サイコロを振る 8 int dice = rand.nextInt(6) + 1; 9 10 // 左端の"n:" を出力 11 System.out.print(i + ":"); 12 13 // サイコロの出た目分、'+' をループで出力 14 for (int j = 0; j < dice; j++) { 15 System.out.print("+"); 16 } 17 18 // 最後に改行 19 System.out.println(); 20 } 21 } 22} 23
実行例です。
sh
1$ javac t7.java 2$ java t7 31:+++++ 42:+++ 53:+ 64:++++ 75:+++ 86:+++++ 97:+++++ 108:+ 119:++++ 1210:++++ 1311:++++ 1412:++++++ 1513:+++++ 1614:+++ 1715:+ 1816:+++ 1917:++++ 2018:++++++ 2119:++++++ 2220:+++++ 23$
修正した回答(題意に沿ったもの)
Java
1import java.util.Random; 2 3public class t7b { 4 public static void main(String[] args) { 5 Random rand = new Random(); 6 int[] freqs = new int[6 + 1]; 7 for (int i = 0; i < 20; i++) { 8 // サイコロを振る 9 int dice = rand.nextInt(6) + 1; 10 // 集計 11 freqs[dice]++; 12 } 13 14 for (int i = 1; i < freqs.length; i++) { 15 16 // 左端の"n:" を出力 17 System.out.print(i + ":"); 18 19 // 1~6の目のそれぞれの回数分、'+' をループで出力 20 for (int j = 0; j < freqs[i]; j++) { 21 System.out.print("+"); 22 } 23 24 // 最後に改行 25 System.out.println(); 26 } 27 } 28}
再度の実行例です。
sh
1$ java t7b 21:++ 32:++++ 43:++++ 54:+++++++ 65:++ 76:+ 8$
投稿2020/06/13 01:43
編集2020/06/13 04:32総合スコア9256
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/13 05:11
2020/06/14 02:12
0
for(int g =1;g<num1;g++){
for(int g =0;g<num1;g++){
ではどでしょ
元のコードでは、
forの動作的に、num1が1のときは、g<num1が成立しないので、ループのナカミが全く実行されません
投稿2020/06/13 00:07
編集2020/06/13 00:10総合スコア88042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
java
1import java.util.Random; 2 3public class Main { 4 public static void main(String[] args) { 5 final int LOOP_COUNT = 5; 6 final String BARS[] = { ":+", ":++", ":+++", ":++++", ":+++++", ":++++++" }; 7 Random r = new Random(); 8 for (int i = 0; i < LOOP_COUNT; i++) { 9 int n = r.nextInt(6); 10 System.out.print(n + 1); 11 System.out.println(BARS[n]); 12 /** 13 n++; 14 String line = "" + n + ":"; 15 for (int j = 0; j < n; j++) { 16 line += "+"; 17 } 18 System.out.println(line); 19 **/ 20 } 21 } 22}
2つの方法を書いてみました。
- サイコロの目ごとに表示する+の文字列を配列でつくっておいて、それを表示する。
- サイコロの目の数だけ + をつなげてるようにして、それを表示する。
追記:
私も問題を取り違えてました。
頻度を表示するようにつくりなおしました。
java
1import java.util.Random; 2 3public class Main { 4 public static void main(String[] args) { 5 final int LOOP_COUNT = 100; 6 String bars[] = { 7 "1:", "2:", "3:", "4:", "5:", "6:" }; 8 Random r = new Random(); 9 for (int i = 0; i < LOOP_COUNT; i++) { 10 int n = r.nextInt(6) + 1; 11 bars[n - 1] += "*"; 12 } 13 System.out.println(String.join("\n", bars)); 14 } 15}
投稿2020/06/13 02:49
編集2020/06/13 05:10総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/13 04:33