Java foreach不适用于表达式类型

Java foreach不适用于表达式类型,java,Java,这个错误意味着什么?我该怎么解决呢 foreach不适用于表达式类型 我正在尝试编写一个find()方法。在linkedlist中查找字符串的 public class Stack<Item> { private Node first; private class Node { Item item; Node next; } public boolean isEmpty() { ret

这个错误意味着什么?我该怎么解决呢

foreach不适用于表达式类型

我正在尝试编写一个find()方法。在linkedlist中查找字符串的

public class Stack<Item>
{
    private Node first;

    private class Node
    {
        Item item;
        Node next;
    }

    public boolean isEmpty()
    {
        return ( first == null );
    }

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

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


public find
{
    public static void main( String[] args )
    {
    Stack<String> s = new Stack<String>();

    String key = "be";

    while( !StdIn.isEmpty() )
        {
        String item = StdIn.readString();
        if( !item.equals("-") )
            s.push( item );
        else 
            StdOut.print( s.pop() + " " );
        }

    s.find1( s, key );
     }

     public boolean find1( Stack<String> s, String key )
    {
    for( String item : s )
        {
        if( item.equals( key ) )
            return true;
        }
    return false;
    }
}
公共类堆栈
{
私有节点优先;
私有类节点
{
项目;
节点下一步;
}
公共布尔值为空()
{
返回(first==null);
}
公共作废推送(项目)
{
节点oldfirst=第一个;
第一个=新节点();
first.item=项目;
first.next=oldfirst;
}
公共物品
{
项目=第一个。项目;
first=first.next;
退货项目;
}
}
公众发现
{
公共静态void main(字符串[]args)
{
堆栈s=新堆栈();
String key=“be”;
而(!StdIn.isEmpty())
{
String item=StdIn.readString();
如果(!item.equals(“-”)
s、 推(项);
其他的
打印(s.pop()+);
}
s、 find1(s,key);
}
公共布尔find1(堆栈s,字符串键)
{
用于(字符串项:s)
{
如果(项等于(键))
返回true;
}
返回false;
}
}

这是我的全部代码

请确保您的for构造如下所示

    LinkedList<String> stringList = new  LinkedList<String>();
    //populate stringList

    for(String item : stringList)
    {
        // do something with item
    }
<E> boolean contains(E e, List<E> list) {

    for(E v : list) if(v.equals(e)) return true;
    return false;
}
LinkedList stringList=新建LinkedList();
//填充字符串列表
用于(字符串项:stringList)
{
//对这个项目做些什么
}

是否使用迭代器而不是数组

您不能只将
迭代器
传递到增强的for循环中。以下第2行将生成编译错误:

    Iterator<Penguin> it = colony.getPenguins();
    for (Penguin p : it) {
我刚看到你有自己的Stack类。你知道SDK中已经有一个了,对吧?
您需要实现
Iterable
接口,以便将这种形式的
用于
循环:

,而不使用代码,这只是一个救命稻草

如果您正试图编写自己的列表查找方法,它将是这样的

    LinkedList<String> stringList = new  LinkedList<String>();
    //populate stringList

    for(String item : stringList)
    {
        // do something with item
    }
<E> boolean contains(E e, List<E> list) {

    for(E v : list) if(v.equals(e)) return true;
    return false;
}
boolean包含(E,列表){
对于(ev:list),如果(v.equals(E))返回true;
返回false;
}

如果你能展示你的代码会有帮助的。你能发布一些代码吗?如果你的分数很好,你会投票给我答案吗?对我来说很好。你在用什么编译器?Sun的?问题是堆栈类没有实现Iterable,它没有重写
公共迭代器()
方法,因此在执行此操作时没有向for循环传递迭代器:
for String item:Stack s)
。您可以通过添加存储堆栈项的哈希集、实现Iterable并重写迭代器方法以返回哈希集的迭代器来解决这个问题。然后您应该能够在类中使用for-each循环。