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

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

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

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1988閲覧

配列に乱数4桁を格納して画面出力

oisii

総合スコア6

Java

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/03/11 06:04

編集2020/03/11 06:23

前提・実現したいこと

Javaの課題で乱数4桁を重複なしで画面出力したいのですが
上手くできません

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Java

1System.out.println("ゲームを始めます"); 2 int answer[] = new int[4]; 3 Boolean isDuplicate=false; 4 do{ 5 answer[0]=(int)(Math.random()*9)+1; 6 for(int i = 1;i < answer.length;i++){ 7 answer[1] = (int)(Math.random() * 10) ; 8 } 9 isDuplicate=false; 10 for (int j=0;j < answer.length-1;j++){ 11 for (int k=j+1; k < answer.length;k++){ 12 if (answer[j]==answer[k]){ 13 isDuplicate=true; 14 } 15 } 16 } 17 } while (isDuplicate); 18 System.out.println(); 19

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

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

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

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

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

nskydiving

2020/03/11 06:07

コードタグで囲ってもらっていますが、閉じの```が抜けてしまっているようです。 質問欄を「編集」ボタンから修正してください。
BeatStar

2020/03/11 06:33

>> うまくいきません ではなくて、「どのようにうまくいかないのか」を明記してください。 たまに「質問者さんが頭の中で計算ミスしている」場合もあります。 例えば 7 × 4 は 28 なのに、21 としてしまっていて…とかですね。 あるいはコード的には正しくても見当違いのことをしている( 例えば「ユーザ入力を受け取っている」つもりで「標準出力」しているとかです ) 場合もあります。 「本来はこうあるべきだが、こうなる」みたいなものでもいいので書いてください。
yureighost

2020/03/11 06:43

要望が少し分かりづらいので確認ですが、 処理を見たところでは4桁を形成する数字に同じ数字があってはならない。 例(OK:1234、NG:1224) ってことでいいですかね? とりあえず処理的には3桁目(answer[2])と4桁目(answer[3])に値を設定しないまま、 処理を回しているため、初期値の0で一致して isDuplicate=true; の文に絶対入ってしまうため無限ループとなっています。
oisii

2020/03/11 06:49

したい処理はそれです!無限ループを抜けるにはどのようにしたらいいのでしょうか?ここら辺の理解が乏しくすいません。
guest

回答2

0

ベストアンサー

int配列で前後比較する発想は悪くないと思います。
ただ何度もループさせるより一桁ずつ確定させてしまった方が簡単ですね。

java

1System.out.println("ゲームを始めます"); 2int answer[] = new int[4]; 3answer[0]=(int)(Math.random()*9)+1; 4int i = 1; 5// 1から3まで繰り返す(answer[1~3]まで処理を行う) 6while (i < answer.length) { 7 answer[i] = (int)(Math.random() * 10) ; 8 int j = i - 1; 9 while (j >= 0) { 10 // 前の桁の数字と同じ場合 11 if (answer[i] == answer[j]){ 12 break; 13 } 14 j--; 15 } 16 if (j == -1) { 17 i++; 18 } 19} 20// int配列を一文字ずつ出力 21Arrays.stream(answer) 22 .forEach(System.out::print);

投稿2020/03/11 07:19

編集2020/03/11 10:46
yureighost

総合スコア2183

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

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

oisii

2020/03/11 08:09

出来ました!ありがとうございます。
kazuma-s

2020/03/11 08:23

できるわけありません。 一つ前と異なるだけなので、7202 や 9098 などが生成されます。
yureighost

2020/03/11 09:13

申し訳ない。 その通りなので修正入れてます。
kazuma-s

2020/03/11 10:05

その修正も変です。 i が 2 のとき、answer[2] を answer[0] と answer[1] と比較して、どちらとも異なっていたら i は 2増えて 4 になり、answer[3] に値が設定されません。
guest

0

Java

1class Game { 2 public static void main(String[] args) { 3 int answer[] = new int[4]; 4 int num[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 5 int n = num.length; 6 for (int i = 0; i < answer.length; i++) { 7 int r = (int)(Math.random() * n); 8 answer[i] = num[r]; 9 num[r] = num[--n]; 10 } 11 for (int i = 0; i < answer.length; i++) 12 System.out.print(answer[i]); 13 System.out.println(); 14 } 15}

先頭に 0 が来ないようにするにはどうしたらよいと思いますか?

追記
先頭に 0 が来ないようにすると、

Java

1class Game { 2 public static void main(String[] args) { 3 int answer[] = new int[4]; 4 int num[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 5 int n = num.length - 1; 6 7 int r = (int)(Math.random() * n) + 1; 8 answer[0] = num[r]; 9 num[r] = num[n]; 10 11 for (int i = 1; i < answer.length; i++) { 12 r = (int)(Math.random() * n); 13 answer[i] = num[r]; 14 num[r] = num[--n]; 15 } 16 for (int i = 0; i < answer.length; i++) 17 System.out.print(answer[i]); 18 System.out.println(); 19 } 20}

投稿2020/03/11 07:25

編集2020/03/11 10:56
kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問