• 締切済み

要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

JAVAの練習問題でわからなくて困っています 以下は線形探索のプログラムで、このプログラムを改良して、 要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。 以下のような簡単なプログラムでできる方法で行いたいです。 どなたか答えまたはヒントを下さい、お願いします。 ------------------------------------------------------------ import java.util.Random; import java.util.Scanner; public static void main (String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); final int n = 10; //要素数 int[] a = new int[n]; //配列を宣言 for (int j = 0; j < n;) a[j] = rand.nextInt(10); System.out.print("配列aの全要素の値\n{ "); for (int j = 0; j < n; j++) System.out.print(a[j] + " "); System.out.println("}"); System.out.print("探す数値 : "); int key = stdIn.nextInt(); int i; for (i = 0; i < n; i++) if (a[i] == key) break; if (i < n) //探索成功 System.out.println("それはa[" + i + "]にあります。"); else //探索失敗 System.out.println("それはありません。"); } }

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

えぇと, 「0~9 の値が重複しないようにする」ということ? だとしたら, 最初に 0~9 の値を入れておいて, ランダムに交換するというのが簡単ですね. for (i=0; i < 10; ++i) a[i] = i; for (i = 10; i > 1; --i) { int r = rand.nextInt(i); int t = a[r]; a[r] = a[i]; a[i] = t; } という感じ, かな?

pochi1234
質問者

お礼

自分で解決できました。線形探索のプログラムを利用したらうまくできました。 for (int i = 0; i < n; i++) { a[i] = rand.nextInt(10); int x = a[i]; for (i = 0; i < n; i++) if (a[i] == x) break; }

pochi1234
質問者

補足

最初に値を入れて、ランダムに交換する方法があるのですか! for (int i = 0; i < 10; ++i) a[i] = i; for (int i = 10; i > 1; --i) { int r = rand.nextInt(i); int t = a[r]; a[r] = a[i]; a[i] = t;} 試してみましたが、a[r] = a[i]; でコンパイルエラーしてしまいます。