🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

4794閲覧

乱数を使ったグラフ作成

izone

総合スコア5

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/12/04 08:22

編集2019/12/04 08:54

実現したいこと。
Javaを使いサイコロをn回振って出た目(1〜6)の回数を記録して(*)でグラフ表示をしたいです。
(例)
1 : ****
2 : **
3 : *********
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
Rondomクラスを使いランダムで数を出力できるところまでは来たのですが、その先がわかりません。教えてください。

現在のコード

import java.util.Scanner;
import java.util.Random;

public class test_1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random rand = new Random();

System.out.print("サイコロを振る回数 > "); int max = scan.nextInt(); for (int i=0; i<max; i++) { int dice = rand.nextInt(6) + 1; } System.out.println(); }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuapricot

2019/12/04 08:24

現在のコードを提示して下さい
izone

2019/12/04 08:54 編集

import java.util.Scanner; import java.util.Random; public class test_1 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random rand = new Random(); System.out.print("サイコロを振る回数 > "); int max = scan.nextInt(); for (int i=0; i<max; i++) { int dice = rand.nextInt(6) + 1; } System.out.println(); } }
izone

2019/12/04 08:49

こちらになります。この先にどうしたら良いのかわかりません。
guest

回答2

0

ベストアンサー

動くか試していないので合っているか分かりませんが、こんな感じでどうでしょうか。

JAVA

1 2import java.util.Scanner; 3import java.util.Random; 4 5public class test_1 { 6public static void main(String[] args) { 7Scanner scan = new Scanner(System.in); 8Random rand = new Random(); 9 10System.out.print("サイコロを振る回数 > "); 11int max = scan.nextInt(); 12 13int diceLog[] = new int[6]; 14 15for (int i=0; i<max; i++) { 16 int dice = rand.nextInt(6) + 1; 17 System.out.println(dice); 18 diceLog[dice-1] = diceLog[dice-1] + 1; 19} 20 21String str; 22for (int k=0; k<6; k++) { 23str = (k+1) + ":"; 24 for(int m=0; m<diceLog[k]; m++) { 25 str = str + "*"; 26 } 27System.out.println(str); 28}

ちなみに、

java

1 int dice = rand.nextInt(6) + 1; 2 System.out.println(dice); 3 diceLog[dice-1] = diceLog[dice-1] + 1;

この部分の出力はなくてもいいのですが、なんの値が出たのか確認しないと最後のグラフが正しいのか否か確認できないので入れておきました。

投稿2019/12/05 08:52

FoyLand

総合スコア72

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izone

2019/12/05 10:40

回答ありがとうございます。『配列を使って値を格納してから*に変換した』であってますでしょうか? 何度もすみません。初心者なもので、、、
FoyLand

2019/12/05 13:52 編集

ちょっと微妙そうな感じがするので念のため補足します。 diceLog[]は、各数字が何回出たか記録するための配列です。 1から順番に3,5,3,2,6,5回ずつ出ていたとします。 この時のdiceLogの中身は、diceLog = [3, 5, 3, 2, 6, 5]となっています。 この次に4が出たら、4つ目の配列が2から3に代わるので、diceLog = [3, 5, 3, 3, 6, 5]となります。 これを計算で行うには、4つ目の要素に1を足し算すればよいので、 diceLog[3] = diceLog[3] + 1; //4つ目の要素の番号は"3"なので となります。これを一般化すると、nが出るたびにn番目の要素に1を加えればよいので、 diceLog[n-1] = diceLog[n-1] + 1; こうして、各数字の出た回数が配列diceLogに格納されます。 for(int m=0; m<diceLog[k]; m++) { str = str + "*"; } この部分は、文字列変数strに文字(列)*を繋げる式をdiceLog[k]回繰り返しています。よって、strは、*がdiceLog[k]個つながった文字列となります(正確には(k+1) + ":"が最初についていますが)。 この、サイコロのある数字が出た回数文*のつながった文字列が完成するごとに System.out.println(str); で出力を行い、次の数字に切り替えて同じ作業を行います。 この説明で分かっていただけましたでしょうか。 まだ分からないことがありましたら何でもお聞きください。
izone

2019/12/12 09:46

ご丁寧にありがとうございます! diceLog[dice-1] = diceLog[dice-1] + 1;の部分がいまいち理解し切れていませんでしたが、おかげさまで理解することができました!
guest

0

Javaを使いサイコロをn回振って出た目(1〜6)の回数を記録して(*)でグラフ表示をしたいです。

ご自分で書いたこれをそのままやれば実現できると思うのですが…
まず、「記録」をしましょう。もし手作業でやるならどうしますか?

投稿2019/12/04 08:26

swordone

総合スコア20669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izone

2019/12/04 08:50

回答ありがとうございます。もう少し考慮してやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問