private int[] list = {1,2,3,4,5,6,7,8,9};
我应该使用什么代码从该列表中获取随机但唯一的数字。请为我提供最简单的方法,我是初学者。谢谢你的帮助。
将您的声明更改为:
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
调用返回的列表将在内部使用您的数组。
我建议您进行洗牌,然后按照它们在洗牌结果中的顺序选择数字。
Integer[] list = {1,2,3,4,5,6,7,8,9};
Collections.shuffle(Arrays.asList(list));
在这些场景中使用的一般算法是index
返回random number modulo length of the array
您可以尝试以下代码:
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 和列表的最后一个索引之间生成一个随机整数,如果该索引不为空,则打印该索引处的项目,然后将该项目设为空。静态函数'empty',检查数组中的每一项是否为空(即每一项都已被看到)。当 'empty' 返回 true 时,'while' 循环终止。使用“Integer”类型而不是“int”的原因是“int”变量不能为空,而“Integer”变量可以。
'empty' 函数一次搜索一个索引,如果找到非空索引,则立即返回 false。这是一种节省时间的机制,这意味着该函数不会执行任何不必要的搜索。如果该循环完全完成,那么我们知道没有找到非空条目,因此返回 true。