-2

私はArrayそれが10の異なる整数0-9を含むようにを作ろうとしています。私はこれを持っています:

for (int i = 0; i < perm.length; i++) 
 { 
    int num = (int) (Math.random() * 9); 
    boolean check = true;

    if (Arrays.asList(perm).contains(num) == true) 

      check = false; 
        else 
          {
           check = true; 
           perm[i] = num; 
          } 

 while (check == false) 
 { 
   num = (int) (Math.random() * 9); 

    } 
}

動作し、異なる整数の配列を作成する必要があるようですが、そうではありません。

4

3 に答える 3

1

代わりにこれはどうですか(より簡潔なアプローチが必要な場合):

List<Integer> l = new ArrayList<Integer>();
for (int i = 0; i < 10; i++)
    l.add(i);  // add 0-9
Collections.shuffle(l)

Integer[] ints = l.toArray(new Integer[10]);

ここで行っているのは、リストを作成し、0〜9の整数で埋め、シャッフルし、内容を配列に書き込むことだけです。


より「手動」のアプローチが必要な場合は、次のようなものをお勧めします。

List<Integer> l = new ArrayList<Integer>();
for (int i = 0; i < 10; i++)
   l.add(i);  // add 0-9

int[] ints = new int[10];
for (int i = 0 ; i < 10; i++)
    ints[i] = l.remove((int)(Math.random() * l.size()));

System.out.println(Arrays.toString(ints));
[7、2、3、4、9、6、0、1、8、5]

投稿したコードにはへの呼び出しが含まれているため、リストの使用が許可されていると想定していますArrays.asList

于 2012-12-09T16:55:50.727 に答える
1

リストの作成を避けたい場合は、自分でシャッフルすることができます。

    Random random = new Random();
    int[] perm = new int[10];
    for (int i = 0; i < 10; i++) {
        perm[i] = i;
    }
    for (int i = 0; i < 9; i++) {
        int j = random.nextInt(10 - i);
        int tmp = perm[i];
        perm[i] = perm[i + j];
        perm[i + j] = tmp;
    }
    System.out.println(Arrays.toString(perm));
于 2012-12-09T17:04:11.910 に答える
0

0から8(9?)までの数字の順列を生成しようとしているようです。これを行う最も簡単な方法は、配列リストに番号を順番に入力してから、を使用することCollections.shuffle()です。

于 2012-12-09T16:55:09.557 に答える