我正在尝试制作一个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);
}
}
它似乎应该工作并使用不同的整数创建一个数组,但事实并非如此。
答案 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()
。