-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

如果你想避免创建一个列表,你可以自己洗牌:

    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 回答
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 回答
0

听起来您正在尝试生成从 0 到 8(9?)的数字排列。最简单的方法是按顺序用数字填充数组列表,然后使用Collections.shuffle().

于 2012-12-09T16:55:09.557 回答