Java - 使用hasNext()方法时出现“无法找到符号”错误

时间:2017-11-01 08:40:35

标签: java

我在使用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。除此之外,其余的代码工作正常。

感谢您的帮助

谢谢:)

3 个答案:

答案 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()) {