プロが教えるわが家の防犯対策術!

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

A 回答 (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;
}
という感じ, かな?

この回答への補足

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

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
    • good
    • 1
この回答へのお礼

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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!