我正在尝试删除我的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(//);
}
答案 0 :(得分: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
7次循环。
答案 1 :(得分:2)
这样做。
for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
Integer s = iterator.next();
System.out.println(s);
iterator.remove();
}
答案 2 :(得分:1)
我建议使用不允许重复的HashSet<Integer>
:
Set<Integer> set = new HashSet<Integer>();
答案 3 :(得分: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);
}
答案 4 :(得分: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());