Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不迭代实现Iterable的类_Java_Loops_Iterator_Iteration_Iterable - Fatal编程技术网

Java 不迭代实现Iterable的类

Java 不迭代实现Iterable的类,java,loops,iterator,iteration,iterable,Java,Loops,Iterator,Iteration,Iterable,下面的代码给了我一个不编译的错误:“foreach不适用于'Bag'类型” 我不明白问题出在哪里,因为“Bag”类正在实现“Iterable”,所以我想,循环应该将“Bag”视为“Iterable”。请你帮我澄清一下情况好吗 class Bag<Item> implements Iterable<Item> { private Node first; private class Node { Item item; Node next; } public

下面的代码给了我一个不编译的错误:“foreach不适用于'Bag'类型”

我不明白问题出在哪里,因为“Bag”类正在实现“Iterable”,所以我想,循环应该将“Bag”视为“Iterable”。请你帮我澄清一下情况好吗

class Bag<Item> implements Iterable<Item> {
private Node first;

private class Node {
    Item item;
    Node next;
}

public void add(Item item) {
    Node oldfirst = first;
    first = new Node();
    first.item = item;
    first.next = oldfirst;
}

public Iterator<Item> iterator() {
    return new ListIterator();
}

private class ListIterator implements Iterator<Item> {
    private Node current = first;

    public boolean hasNext() {
        return current != null;
    }

    public void remove() {}

    public Item next() {
        Item item = current.item;
        current = current.next;
        return item;
    }

}

public static void main(String[] args) {
    Bag<Integer> a = new Bag();
    a.add(5);
    a.add(10);
    for (int w : a) {
        System.out.println(w.iterator());
    }
 }
}
类包实现了Iterable{
私有节点优先;
私有类节点{
项目;
节点下一步;
}
公共作废添加(项目){
节点oldfirst=第一个;
第一个=新节点();
first.item=项目;
first.next=oldfirst;
}
公共迭代器迭代器(){
返回新的ListIterator();
}
私有类ListIterator实现了迭代器{
私有节点电流=第一;
公共布尔hasNext(){
返回电流!=null;
}
public void remove(){}
公共项目下一步(){
项目=当前项目;
当前=当前。下一步;
退货项目;
}
}
公共静态void main(字符串[]args){
袋子a=新袋子();
a、 增加(5);
a、 增加(10);
对于(int w:a){
System.out.println(w.iterator());
}
}
}

问题出在您的
main
方法中。经过几次简单的修复后,这项功能可以正常工作:

public static void main(String[] args) {
    Bag<Integer> a = new Bag<>();
    a.add(5);
    a.add(10);
    for (int w : a) {
        System.out.println(w);
    }
}
publicstaticvoidmain(字符串[]args){
袋子a=新袋子();
a、 增加(5);
a、 增加(10);
对于(int w:a){
系统输出打印LN(w);
}
}
首先,
Bag
初始化-
缺失,没有它我无法编译


然后在println中,您不能调用
w.iterator()
,因为
w
是一个
int
而没有这种方法。不确定你想在那里实现什么。

包是从哪里来的?如果它不编译,它就不能实现Iterable。实际上对我来说,是的,我知道我不能迭代整数。我只是想弄明白为什么这不起作用,在发布问题时忘了将w.iterator()改为w。然而,在我的例子中,问题在于循环本身。在为(intw:a)编写时,它给出了上面提到的错误。
public static void main(String[] args) {
    Bag<Integer> a = new Bag();
    a.add(5);
    a.add(10);
    for (int w : a) {
        System.out.println(w);
    }
}
a.iterator().forEachRemaining(n -> System.out.println(n));