Синтаксическая ошибка на токене "еще" - как на земле? - PullRequest
1 голос
/ 18 ноября 2011

Я изучаю Java классическим способом - играя с Карелом.

Но я, кажется, столкнулся с простой проблемой, которую не могу решить даже с помощью Google.

В Eclipse я получаю сообщение о том, что в токене "else" есть синтаксическая ошибка, и что я должен удалить ее.

Почему?Синтаксис в блоке кода над оператором else идентичен.

Вот мой код:

public void run() {

    putBeeper();
    if(beepersPresent()){

        move();

    } while(frontIsClear()){
        move();
        putBeeper();
    } else if(facingEast()){

        turnLeft();
        move();

    }
        }

Ответы [ 7 ]

4 голосов
/ 18 ноября 2011

Оператор else должен следовать сразу после if, между ними есть цикл while.

Поскольку это было понижено, более формально соответствующий раздел Язык JavaСпецификация

14.9 Оператор if Оператор if позволяет условное выполнение оператора или условный выбор двух операторов, выполняя одно или другое, но не оба.

IfThenStatement:
        if ( Expression ) Statement

IfThenElseStatement:
        if ( Expression ) StatementNoShortIf else Statement

IfThenElseStatementNoShortIf:
        if ( Expression ) StatementNoShortIf else StatementNoShortIf

Выражение должно иметь тип boolean или Boolean, иначе произойдет ошибка времени компиляции.

3 голосов
/ 18 ноября 2011

Потому что вы пытаетесь сказать while() { } else {

Почему еще?

(Да, я только что сделал это.)

0 голосов
/ 18 ноября 2011

Действительно довольно просто.

Ваше if длится между {и}. Остальное должно быть точно потом.

Удалите} в ближайшее время и положите его куда-нибудь еще, и вы должны быть в порядке.

0 голосов
/ 18 ноября 2011

Вы ставите else после while, это действительно синтаксическая ошибка

Попробуйте:

public void run() {
    putBeeper();
    if(beepersPresent()){
        move();
    } 
    while(frontIsClear()){
        if (facingEast()) {
            turnLeft();
        }
        move();
        putBeeper();
    }
}
0 голосов
/ 18 ноября 2011

Что именно вы пытаетесь сделать здесь?

while(frontIsClear()){
        move();
        putBeeper();
    } else if(facingEast()){

        turnLeft();
        move();

Хотя это ... еще, если это?Не возможно.

0 голосов
/ 18 ноября 2011

Возможно:

while(frontIsClear())

должно быть

else if(frontIsClear())
0 голосов
/ 18 ноября 2011

Ваш else соответствует while, а не if. Не совсем понятно, что вы там пытаетесь сделать.

...