为什么编译器说当MyList实现iterable时我只能迭代一个iterable实例?

时间:2013-05-08 01:27:17

标签: java

如何迭代正在另一个名为Binary Tree的类中使用的linkedList节点。在旁注,任何建议使其更多OO而不是宣布公共内部阶级?

public class BinaryTree
{
Node root;

    class Node
    {
        Integer value;
        Node left;
        Node right;

        Node(int value)
        {
            this.value = value;
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyList list = new MyList();
        list.create(8);
        list.create(7);
        list.create(6);
        list.create(5);
        list.create(4);
        list.create(3);
        list.create(2);
        list.create(1);

                //Compiler is flagging an error here. How do I iterate over integer values of a node ? 
        for(MyList ? : list.iterator())
        {
            System.out.println(node.getVal());
            System.out.println("-->");

        }


    }

// MyList class

package com.linkedlist;

import java.util.Iterator;

@SuppressWarnings("rawtypes")
public class MyList implements Iterable{
    private Node head;

    public Node getHead()
    {
        return head;
    }
    @Override
    public Iterator iterator() {

        return new ListIterator();
    }

    public class Node
    {
    Integer val;
    Node next;

    Node(int data)
    {
        this.val = data;
    }

    public Integer getVal()
    {
        return this.val;
    }

    public Node getNext()
    {
        return this.next;
    }
    }


    public Node create(int data)
    {
        if(head==null)
            return new Node(data);
        else
        {

            head.next = new Node(data);
            return head;
        }

    }

    private class ListIterator implements Iterator
     {
     private Node current = head;
     public boolean hasNext() { return current != null; }
     public void remove() { /* not supported */ } 
     public Integer next()
     {
     Integer val = current.val;
     current = current.next; 
     return val;
     }
     }

}

3 个答案:

答案 0 :(得分:4)

//Compiler is flagging an error here. How do I iterate over integer values of a node ? 
for(MyList ? : list.iterator())

你制作了这个语法。从开始到结束都是完全错误的。

由于您尚未指定MyList的元素类型,因此它是Object,因此您正在使用Objects,进行迭代,因此您需要

for (Object element : list)

答案 1 :(得分:1)

编译器希望您像这样迭代列表:

for(Integer val : list) {
    ....
}

答案 2 :(得分:0)

在java advanced for循环中,左边部分是列表包含的对象,例如object或String。正确的部分是实现Iterable Interface的列表或自定义类对象。你不能在这里放一个迭代器。