Java逻辑阵列麻烦

时间:2012-12-09 16:52:01

标签: java arrays integer

我正在尝试制作一个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); 

    } 
}

它似乎应该工作并使用不同的整数创建一个数组,但事实并非如此。

3 个答案:

答案 0 :(得分: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的调用。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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