こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

要素数が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("それはありません。");
}
}

投稿日時 - 2008-12-29 22:06:30

QNo.4591957

困ってます

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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;
}
という感じ, かな?

投稿日時 - 2008-12-29 22:24:24

補足

最初に値を入れて、ランダムに交換する方法があるのですか!

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]; でコンパイルエラーしてしまいます。

投稿日時 - 2008-12-29 23:19:12

お礼

自分で解決できました。線形探索のプログラムを利用したらうまくできました。

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;
}

投稿日時 - 2008-12-30 20:46:57

あなたにオススメの質問