-2
private int[] list = {1,2,3,4,5,6,7,8,9};

我应该使用什么代码从该列表中获取随机但唯一的数字。请为我提供最简单的方法,我是初学者。谢谢你的帮助。

4

5 回答 5

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调用返回的列表将在内部使用您的数组。

于 2013-01-28T13:49:28.090 回答
2

我建议您进行洗牌,然后按照它们在洗牌结果中的顺序选择数字。

于 2013-01-28T13:50:21.393 回答
0
Integer[] list = {1,2,3,4,5,6,7,8,9};
Collections.shuffle(Arrays.asList(list));
于 2013-01-28T13:50:14.240 回答
0

在这些场景中使用的一般算法是index返回random number modulo length of the array

于 2013-01-28T14:25:19.530 回答
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 和列表的最后一个索引之间生成一个随机整数,如果该索引不为空,则打印该索引处的项目,然后将该项目设为空。静态函数'empty',检查数组中的每一项是否为空(即每一项都已被看到)。当 'empty' 返回 true 时,'while' 循环终止。使用“Integer”类型而不是“int”的原因是“int”变量不能为空,而“Integer”变量可以。

'empty' 函数一次搜索一个索引,如果找到非空索引,则立即返回 false。这是一种节省时间的机制,这意味着该函数不会执行任何不必要的搜索。如果该循环完全完成,那么我们知道没有找到非空条目,因此返回 true。

于 2013-01-28T14:30:57.310 回答