我在使用ArrayLists的haseNext()方法时遇到了这个错误:
error: cannot find symbol
while(isduplicate == false && birthdays.hasNext())
这是我的代码:
import java.util.*;
class hello
{
public static void main(String args[])
{
Integer size = 4;
Integer count = 5;
Integer doubleinarray = 0;
for(Integer i = 0 ; i < count ; i++) {
List<Integer> birthdays = new ArrayList<Integer>();
birthdays = CreateSimulator(size);
Integer countdown = size;
boolean isduplicate = false;
while(isduplicate == false && birthdays.hasNext()) {
Integer date = birthdays.get(0);
birthdays.remove(0);
if(birthdays.contains(date)) {
isduplicate = true;
doubleinarray ++;
}
}
}
System.out.println(doubleinarray / count * 100);
}
public static List<Integer> CreateSimulator(int size)
{
List<Integer> Birthdays = new ArrayList<Integer>(size);
Random rand = new Random();
for(Integer i =0 ; i < size ; i++) {
Birthdays.add(rand.nextInt(364) + 1);
}
return Birthdays;
}
}
我不明白为什么它不接受hasNext。除此之外,其余的代码工作正常。
感谢您的帮助
谢谢:)
答案 0 :(得分:3)
你必须做类似的事情:
Iterator<Integer> birthdaysIterator = birthdays.iterator();
使用birthDaysIterator
,您可以拨打hasNext
。
但现在不建议这样做。 你最好表现正常,比如:
正常:
for (int i = 0; i < birthdays.size(); i++) {
System.out.println(birthdays.get(i));
}
with for-each循环:
for (Integer birthday : birthdays) {
System.out.println(birthday);
}
使用Java 8流:
birthdays.forEach((birthday) -> {
System.out.println(birthday);
});
编辑:
根据@OHGODSPIDERS,如果您使用我建议的其他3个版本,您将遇到ConcurrentModificationException。为了避免这种情况,您可以坚持使用迭代器,也可以使用中间列表来保留要删除的元素,然后将其全部删除。
示例:
List<String> toRemove = new ArrayList<>();
for (String birthday : birthdays) {
if (someCondition) {
toRemove.add(birthday);
}
}
birthdays.removeAll(toRemove);
答案 1 :(得分:1)
birthdays
属于List
类型,没有该名称的方法。您正在寻找的是迭代器,您可以像这样访问:
Iterator<Integer> iterator = birthdays.iterator()
并用它来遍历列表。 hasNext是Iterator类型的方法。
答案 2 :(得分:1)
如上所述,List
类没有hasNext()
方法
使用它的另一种方法是检查它是否为空
while (isduplicate == false && !birthdays.isEmpty()) {