質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

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

Q&A

解決済

1回答

1790閲覧

Javaの乱数について

dreamland

総合スコア43

Java

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

0グッド

0クリップ

投稿2021/12/06 06:50

現在、Javaを勉強している初心者です。課題に取り組んでいるのですが、上手くコードが書けず困っています。

課題の内容は、「サイコロを200回振ります.それぞれの出た目(1~6)の回数を記録し,グラフ表示してください.」という内容です。繰り返し,配列,等などを使ってコードを書かなくてないけないそうです。

1:*********
2:******
3:***********
4:*************
5:*******
6:******

↑実行した際に上のように表示されるそうです。

また私の書いてるコードが全然合ってない(間違っている)のではないかと思っております。

課題にすごく困っていて、全然進めないので初心者の私でもわかるように丁寧に教えていだけると助かります。

import java.util.Scanner; import java.util.Random; public class Ex_08_4_1901015360{ public static void main (String args[]){ Scanner scan = new Scanner(System.in); Random rand = new Random(); int [] number = {1,2,3,4,5,6}; for (int i=0; i<=6; i++){ System.out.println(number[i]+":"); } for (int k=0; k<200; k++){ int dice = rand.nextInt(6)+1; System.out.println("+"); } } }

上のコードを実行した際には、

1:
2:
3:
4:
5:
6:

と表示されます。

よろしくお願いいたします。

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

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

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

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

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

1T2R3M4

2021/12/06 07:08

課題出した人に相談してください。
kazuma-s

2021/12/06 09:21

1: 2: 3: 4: 5: 6: と表示されます。 そのあとに、とても重要なメッセージが表示されませんか? for (int i=0; i<=6; i++){ これだと、i は 0~6 で、7回ループを回ります。
dodox86

2021/12/06 10:06

> 課題にすごく困っていて、全然進めないので初心者の私でもわかるように丁寧に教えていだけると助かります。 いやいや、雇われた家庭教師ではないのですから、なぜ1から10まで分かるように丁寧に教えてあげないといけないのでしょう。 多分、teratailの利用の仕方を根本的に誤解されていると思うので、teratailのヘルプを良く読みましょう。 [推奨していない質問] https://teratail.com/help/avoid-asking
dodox86

2021/12/06 10:17

過去質問を見たら、初めての利用というわけではないのでしたね。正直、「今更なぜこんな?」というかんじです。
jimbe

2021/12/06 18:34

何が分からないのかを明確に質問された方が良いでしょう。 「とにかく何がなんだか分からない」と言うことですと「課題を代わりにやってください」と同じ意味にとられます。 "繰り返し" や "配列" 等が分からないのでしたら、それらを使わずに書いて動作したものをご提示くださるだけでも大分違いますので、ご検討ください。
BeatStar

2021/12/06 21:25

ああ、釣りだったんか…回答して損した。釣りは別のところでやりましょう。(釣りじゃないのなら返信ぐらいあるはずだし、マルチポストもしないし、基礎からやるはず)
dreamland

2021/12/07 03:00

皆様、コメント頂きありがとうございます。今度、質問する際は何がわからないか明確に書いて質問するようにします。 指摘していただき、ありがとうございます。
guest

回答1

0

ベストアンサー

まず、考え方そのものが間違っています。プログラミングは意味のない文字の羅列…ではなく、ロジックです。こう書けばいい…というものではなく、『ロジックを記述する*』です。

簡単に言えば『現実世界のシミュレーション』です。我々人間が手作業でやっている手順を、独自の書き方(JavaやC#,C++, ...といった言語の書き方とか)で書き下したものです。(それとデバッグも含まれます)

つまり、「現実世界でならどうするか」です。

まずはJavaで~と考えずに、『現実世界でならどうするか』を考えてみましょう。

今回の場合、

[依頼] ここにサイコロがある。このサイコロを200回振り、それぞれの出た目(1~6)の回数を記録せよ。 さらにそれをグラフ化せよ。

的な依頼かなんかだと考えてみてください。仕事なり教師から頼まれたなりで。

普通に考えると、まずサイコロを振る。そして出た目をノートかなんかに記録する。1回目: 2とか。
更にサイコロを振って出た目を同じノートかなんかに記録する。1回目: 2, 2回目: 1とか。
さらにサイコロを振って...とこれを200回繰り返す。

そうすると、1回目: 2, 2回目: 1, 3回目: 6, 4回目: 1, ...のようになっているはずです。
もちろん、この書き方じゃなくて数列みたいに rn = { 2, 1, 6, 1, ... } のようにしてもいいです。
とにかく記録していく。

そして、次の段階で、それぞれの目のやつを統計みたいに取る。統計っていうか、ヒストグラム?っていうやつをやる感じです。そう、イメージ的には正の字を書いていくアレです。

私なら、(記録のやつでの)一回目のやつから順に見ていく。一回目は2ですが、まだ初めて出たので、正の字の一回分を記録する。このサイトでは厳しいので数字で書きますが。2: 1回目とか。

で、二回目は1なのですが初めて出てくるやつなので1つ目です。なので、

2: 1回目 1: 1回目

とする。さらに三回目もやりますが、6ですね。まだ出ていないので同じく一回目。
よって、

2: 1回目 1: 1回目 6: 1回目

四回目のやつを見ると、1ですね。1はすでにあるので 1回目 + 1回 = 2回目 となりますから、1: 1回目1: 2回目に更新。

すると、

2: 1回目 1: 2回目 6: 1回目

となる。これを200回分繰り返す。

そうすると、質問にあるグラフの数字版が出来る。後はこの数字分、それぞれ書いていけばいい。

もし

1: 10回 2: 3回 3: 1回 4: 20回 5: ... 6: ...

のようになっているとすると、

1は10回出ていますね。よってアスタリスクを10個書けばいい。

で出力されるグラフを見ると常に、<出た目><コロン><アスタリスクの並び>となっています。
コロンは":"で、アスタリスクの並びはグラフのアレとします。

この書式に従って書いていけばいいだけです。

とりあえず出た目が1のときのやつは<出た目>を 1 とすればいいので、1:を先に書く。
そして、回数分アスタリスクを書いていけば、1:**********となるはずです。

さらに出た目 = 2 のとき、3回なので同じく、2:を書き、続けて回数分アスタリスクを書く。
2:***と言う風に。

これを最後まで(つまり6まで)繰り返すと、

1:********** 2:*** 3:* 4:******************** 5:... 6:...

のようになるはずです。

これを実装すればいいだけです。

という事は、

[大雑把な流れ] 1. 200回繰り返す 1.1. 乱数を生成し、配列に追加していく 2. ヒストグラム的なやつの数字版を計算する 3. (2)をもとにグラフを生成する

的な流れになるはずです。

上記でいう「ノートかなんかに記録する」系のアレは、「変数」や『配列』でイケますね。
で、今回は「1~6の目」であることがわかっていて、かつそれは連続した数字なので、配列で(2)を保持する事ができるはずです。

※ ただし、配列は0番目から始まります。

(3)のグラフ生成のアスタリスクを書いていくやつを考えてみましょう。

1の目が3回だと、1:***となるはずです。で、回数が何であれ、「個数分アスタリスクを書く」のは決まっていますから、繰り返し、つまりfor文とかでできるはずです。

後は分かりますよね?

投稿2021/12/06 07:41

BeatStar

総合スコア4962

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

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

dreamland

2021/12/07 02:57

ご丁寧に回答していただき、ありがとうございます。 参考にしながら、課題に取り組みたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問