private int[] list = {1,2,3,4,5,6,7,8,9};
我应该使用什么代码来获取此列表中随机但唯一的数字。 请为我提供最简单的初学者方式。 谢谢你的帮助。
答案 0 :(得分:6)
将您的声明更改为:
private Integer[] list = {1,2,3,4,5,6,7,8,9};
然后在类的任何方法中执行,因为变量是private
:
List<Integer> l = Arrays.asList(list);
Collections.shuffle(l);
这会随机选择所有列表,因此它会做你想要的。
请注意,它也会影响原始数组list
,因为从Arrays.asList
调用返回的列表将在内部使用您的数组。
答案 1 :(得分:2)
我建议您执行shuffle,然后按照随机播放结果中的顺序选择数字。
答案 2 :(得分:0)
Integer[] list = {1,2,3,4,5,6,7,8,9};
Collections.shuffle(Arrays.asList(list));
答案 3 :(得分:0)
在这些场景中使用的一般算法是返回index
random number modulo length of the array
答案 4 :(得分:0)
您可以尝试以下代码:
public static boolean empty(Integer[] list){
for(int i = 0;i<list.length;i++){
if(list[i] != null){
return false;
}
}
return true;
}
public static void main(String[] args){
Integer[] list = {1,2,3,4,5,6,7,8,9};
Random r = new Random();
int index = 0;
while(!empty(list)){
index = r.nextInt(list.length);
if(list[index] != null){
System.out.println(list[index]);
list[index] = null;
}
}
}
这将生成一个介于0和列表最后一个索引之间的随机整数,如果该索引不为null,则在该索引处打印该项,然后将该项设为null。静态函数'empty',检查数组中的每个项是否为空(即每个项都已被看到)。当'empty'返回true时,'while'循环终止。使用'Integer'类型而不是'int'的原因是'int'变量不能为null,而'Integer'变量可以。
'empty'函数一次搜索一个索引,如果找到非空索引则立即返回false。这是一种节省时间的机制,意味着该功能不会执行任何不必要的搜索。如果该循环完全完成,那么我们知道没有找到非null条目,因此返回true。