foreach не относится к типу выражения - PullRequest
8 голосов
/ 26 апреля 2011

что означает эта ошибка? и как мне это решить?

foreach не относится к типу выражения.

я пытаюсь написать метод find (). которые находят строку в связанном списке

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

это весь мой код

Ответы [ 3 ]

11 голосов
/ 26 апреля 2011

Вы используете итератор вместо массива?

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

Вы не можете просто передать Iterator в расширенный цикл for. 2-ая ​​строка следующего генерирует ошибку компиляции:

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

Ошибка:

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

Я только что видел, что у вас есть свой собственный класс стека. Вы понимаете, что он уже есть в SDK, верно? http://download.oracle.com/javase/6/docs/api/java/util/Stack.html Вам необходимо реализовать интерфейс Iterable, чтобы использовать эту форму цикла for: http://download.oracle.com/javase/6/docs/api/java/lang/Iterable.html

2 голосов
/ 26 апреля 2011

Убедитесь, что ваш for-construct выглядит так

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

    for(String item : stringList)
    {
        // do something with item
    }
0 голосов
/ 26 апреля 2011

Без кода это просто хватка.

Если вы пытаетесь написать свой собственный метод поиска по списку, он будет выглядеть так:

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

    for(E v : list) if(v.equals(e)) return true;
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...