![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
現在、JAVAの入門書にてプログラムの勉強中です。
その書籍に掲載のプログラムコードがどうしても意図する結果に
なりません。入力間違いなどのミスはないか何回も見直しましたが、
どこも入力間違いは見当たりません。
何が原因か教えて頂けますでしょうか。
実行例がこのようになります。
数字は例なのでこの限りではありません。
要素数 : 7
a[0] = 7
a[1] = 5
a[2] = 1
a[3] = 2
a[4] = 9
a[5] = 6
a[6] = 3
プログラムコードが下記になります。
/*配列の全要素を1から10の乱数で埋め尽くす
(すべての要素が重複しないようにする*/
01: import java.util.Random;
02: import java.util.Scanner;
03:
04: class ArrayRandY {
05:
06: public static void main(String[] args) {
07: Random rand = new Random();
08: Scanner stdIn = new Scanner(System.in);
09:
10: int n; //要素数
11: do {
12: System.out.print("要素数 : ");
13: n = stdIn.nextInt(); //要素数を読み込む
14: } while (n > 10);
15: int[] a = new int[n]; //配列を生成
16:
17: for (int i = 0; i < n; i++) {
18: int j = 0;
19: do {
20: a[i] = 1 + rand.nextInt(10);
21: for ( ; j < i; j++)
22: if (a[j] == a[i]) break;
23: } while (j < i;);
24: }
25:
26: for (int i = 0; i < n; i++) {
27: System.out.println("a[" + i + "] = " + a[i]);
28: }
29: }
30:}
以上です。
これを
javac ArrayRandY.java → java ArrayRandY
とやると、重複しない結果のときもありますが
重複する値が出てしまうときもあります。
著者のホームページの正誤表を見たのですが情報がありませんでした。
常にこのプログラムの配列の全要素を重複しないようにするには
どうしたらよろしいでしょうか。
よろしくお願いいたします。
ちなみに、プログラムコードですが、入力画面ではインデントを
入力しているのですが確認画面ではなぜかインデントが表現
されてません。
大変見苦しいことお詫び申し上げます。
No.2ベストアンサー
- 回答日時:
21行目のfor文の中でjが初期化されていないので、配列をチェック出来ない場合が出てきます。
i=3だとして
a[0] = 1
a[1] = 2
a[2] = 3
とあって、1回目に取得した値が2、2回目に取得した値が1だった場合、jは1回目のチェックでインクリメントされて1になったままなので、2回目のチェックはa[1]から始めることになります。a[0]はチェック対象外となってしまいます。
なので、2回目はa[1]とa[2]だけチェックして同じ値が無いと判断されてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ページング
-
csvファイルを2次元配列に格納
-
配列の中に複数存在する数がい...
-
【C#】ハッシュテーブル(連想...
-
この警告はどうすれば?
-
同じ配列またはクラスを、2回...
-
『args[]』とは?
-
javamailで複数人にメールを送...
-
java
-
【Ajax通信&Java】配列の受け取...
-
Java配列の問題を教えてくださ...
-
配列を使ってカレンダーを表示...
-
C言語でunsigned char配列を連...
-
[Ljava.lang.Stringってなんですか
-
CSVファイルを二次元配列に格納...
-
n番目に大きな値を探索する
-
javaでの文字列からの数字抽出
-
JavaのBase64デコードで正しく...
-
forループの評価(条件)式につ...
-
javaで大容量テキストファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ページング
-
java
-
配列をセッションに割り当てた後で
-
この警告はどうすれば?
-
Javaで文字と数字が混ざったも...
-
javaで大容量テキストファイル...
-
セッションを使ったint型の値の...
-
C言語でunsigned char配列を連...
-
配列の中に複数存在する数がい...
-
Javaで文字を漢字であるか否か...
-
[Ljava.lang.Stringってなんですか
-
ArrayListからBean配列に値をセ...
-
C#で動的配列Listの中身をListB...
-
【C#】ハッシュテーブル(連想...
-
csvファイルを2次元配列に格納
-
配列で、値の入っている要素数...
-
『args[]』とは?
-
【Ajax通信&Java】配列の受け取...
-
n番目に大きな値を探索する
-
データベースから取得したデー...
おすすめ情報