14 Stimmen

foreach nicht auf die Ausdrucksart anwendbar

Was bedeutet dieser Fehler? und wie kann ich ihn beheben?

foreach nicht auf den Ausdruckstyp anwendbar.

Ich versuche, eine Methode find() zu schreiben, die einen String in einer verknüpften Liste findet.

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;
    }
}

dies ist mein gesamter Code

13voto

Aleadam Punkte 39803

Verwenden Sie einen Iterator anstelle eines Arrays?

http://blogs.oracle.com/CoreJavaTechTips/entry/using_enhanced_for_loops_with

Sie können nicht einfach eine Iterator in die erweiterte for-Schleife. Die 2. Zeile des folgenden Textes erzeugt einen Kompilierungsfehler:

    Iterator<Penguin> it = colony.getPenguins();
    for (Penguin p : it) {

Der Fehler:

    BadColony.java:36: foreach not applicable to expression type
        for (Penguin p : it) {

Ich habe gerade gesehen, dass Sie Ihren eigenen Stack-Kurs haben. Ihnen ist klar, dass es bereits eine im SDK gibt, richtig? http://download.oracle.com/javase/6/docs/api/java/util/Stack.html Sie müssen Folgendes umsetzen Iterable Schnittstelle zu verwenden, um diese Form der for Schleife: http://download.oracle.com/javase/6/docs/api/java/lang/Iterable.html

2voto

Bala R Punkte 104615

Stellen Sie sicher, dass Ihr for-construct wie folgt aussieht

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

    for(String item : stringList)
    {
        // do something with item
    }

1voto

corsiKa Punkte 79125

Ohne Code ist dies nur ein Griff nach dem Strohhalm.

Wenn Sie versuchen, Ihre eigene Methode zum Auffinden von Listen zu schreiben, würde sie folgendermaßen aussehen

<E> boolean contains(E e, List<E> list) {

    for(E v : list) if(v.equals(e)) return true;
    return false;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X