令牌“else”上的语法错误 - 究竟是怎么回事?

时间:2011-11-18 18:42:44

标签: java karel

我正在以经典的方式学习Java - 通过玩Karel。

但我似乎遇到了一个即使在谷歌的帮助下也无法解决的简单问题。

我在Eclipse中遇到错误,说令牌“else”上存在语法错误,我应该将其删除。

为什么? else语句上方代码块中的语法是相同的。

这是我的代码:

public void run() {

    putBeeper();
    if(beepersPresent()){

        move();

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

        turnLeft();
        move();

    }
        }

7 个答案:

答案 0 :(得分:4)

else声明必须在if之后立即跟进,你之间有while循环。

由于这被低估了,更正式的Java Language Specification

的相关部分
  

14.9 if语句if语句允许条件执行语句或条件选择两个语句,执行一个语句   或另一个但不是两个。

IfThenStatement:
        if ( Expression ) Statement

IfThenElseStatement:
        if ( Expression ) StatementNoShortIf else Statement

IfThenElseStatementNoShortIf:
        if ( Expression ) StatementNoShortIf else StatementNoShortIf

Expression必须具有boolean或Boolean类型,否则会发生编译时错误。

答案 1 :(得分:3)

因为你想说while() { } else {

为什么呢?

(是的,我刚刚那样做了。)

答案 2 :(得分:0)

您的else匹配while,而不是if。不完全清楚你在那里想做什么。

答案 3 :(得分:0)

大概:

while(frontIsClear())

应该是

else if(frontIsClear())

答案 4 :(得分:0)

你到底想做什么?

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

        turnLeft();
        move();

虽然这个..否则,如果那样?不可能。

答案 5 :(得分:0)

您将else放在while之后,这确实是语法错误

试试:

public void run() {
    putBeeper();
    if(beepersPresent()){
        move();
    } 
    while(frontIsClear()){
        if (facingEast()) {
            turnLeft();
        }
        move();
        putBeeper();
    }
}

答案 6 :(得分:0)

非常简单。

你是否在{和}之间持续。其他必须完全是事后。

删除附近的}并将其放在其他地方,你应该没问题。