- ベストアンサー
配列の要素に同じ値をもたせないプログラムについて
現在、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 とやると、重複しない結果のときもありますが 重複する値が出てしまうときもあります。 著者のホームページの正誤表を見たのですが情報がありませんでした。 常にこのプログラムの配列の全要素を重複しないようにするには どうしたらよろしいでしょうか。 よろしくお願いいたします。 ちなみに、プログラムコードですが、入力画面ではインデントを 入力しているのですが確認画面ではなぜかインデントが表現 されてません。 大変見苦しいことお詫び申し上げます。
- みんなの回答 (2)
- 専門家の回答
お礼
>zionicさん 解決できました。 具体的に説明していただきわかりやすかったです。 ありがとうございました。