0

我正在尝试为我的 Bingo 程序消除重复项,因此我创建了一个 ArrayList,并且我想删除循环中打印出的整数。我认为我使用的循环是错误的,但我不确定。

             List<Integer> list = new ArrayList<Integer>();
                for(int i = 1; i <= 75; i++){
                    list.add(i);
                }

                for (Integer s : list) {
                    Collections.shuffle(list);
                    System.out.println(s);
                    list.remove(//);
                }
4

5 回答 5

2

如果您要删除所有整数,那么这样做会容易得多:

Collections.shuffle(list);
for (Integer s : list) {
    System.out.println(s);
}
list = new ArrayList<Integer>();

或者,如果您真的想保留相同的列表实例:

Collections.shuffle(list);
for (Integer s : list) {
    System.out.println(s);
}
list.clear();

仅仅创建一个新的数组列表更有效,因为它允许垃圾收集器只收集整个旧列表,而不是一个一个地删除条目。但是,如果您对同一个实例有多个引用,那么您实际上需要清除该列表。

另请注意,shuffle调用已移到循环之外。一旦你完成了一次洗牌,列表已经是随机的,所以再次洗牌是没有意义的......如果你真的想要一个“更好”的洗牌,你可以shuffle在第一个循环之前执行诸如 call 7 次之类的操作。

于 2013-10-22T17:46:49.920 回答
2

这样做。

for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
      Integer s = iterator.next();
      System.out.println(s);
      iterator.remove();
 }
于 2013-10-22T17:48:19.317 回答
1

我建议使用HashSet<Integer>不允许重复的 a:

Set<Integer> set = new HashSet<Integer>();
于 2013-10-22T17:45:37.663 回答
1

你确定这不是你需要的吗?

private static final int NUM_BALLS = 75;

List<Integer> list = new ArrayList<Integer>();
for(int i = 1; i <= NUM_BALLS; i++){
    list.add(i);
}

Collections.shuffle(list);

while (!list.isEmpty()) {
    Integer s = list.remove(list.size() - 1); // for better performance as noted by @Holger
    System.out.println(s);
}
于 2013-10-22T17:49:10.280 回答
1

使用以下代码

    Random generate = new Random();
    Set<Integer> set = new HashSet<Integer>();
    for(int i = 1; i <= 75; i++){
       set.add(generate.nextInt(75));
    }
    Iterator<Integer> iterator = set.iterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
        iterator.remove();
    }
    System.out.print(set.size());
于 2013-10-22T18:32:35.423 回答