如何迭代正在另一个名为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;
}
}
}
答案 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的列表或自定义类对象。你不能在这里放一个迭代器。