【问题标题】:Syntax error on token "else" — how on earth?标记“else”的语法错误——到底怎么回事?
【发布时间】:2011-11-18 18:42:43
【问题描述】:

我正在以经典的方式学习 Java——与 Karel 一起玩耍。

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

我在 Eclipse 中收到一个错误,提示“else”标记存在语法错误,我应该删除它。

怎么会? else 语句上面的代码块中的语法是相同的。

这是我的代码:

public void run() {

    putBeeper();
    if(beepersPresent()){

        move();

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

        turnLeft();
        move();

    }
        }

【问题讨论】:

  • 哇,各位,我们真的需要 8 个回复说同样的话吗?
  • @Skynorth 为了公平起见,8 个回答者中有 7 个在同一分钟内回答,第 8 个紧随其后。
  • 如果同时发布了 better 副本,我通常会删除或取消我的答案:meta.stackexchange.com/questions/15775/… 大多数其他人也这样做。它可以降低噪音。

标签: java karel


【解决方案1】:

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

表达式的类型必须为 boolean 或 Boolean,否则会发生编译时错误。

【讨论】:

    【解决方案2】:

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

    为什么?

    (是的,我就是这么做的。)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        大概:

        while(frontIsClear())
        

        应该是

        else if(frontIsClear())
        

        【讨论】:

          【解决方案5】:

          你到底想在这里做什么?

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

          虽然这个.. else if that?不可能。

          【讨论】:

            【解决方案6】:

            你把else放在while之后,这确实是一个语法错误

            试试看:

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

            【讨论】:

              【解决方案7】:

              真的很简单。

              你的 if 持续在 { 和 } 之间。 else 必须在后面。

              把while附近的}去掉,放到别的地方应该没问题。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-05-29
                • 1970-01-01
                • 2014-08-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-09
                • 1970-01-01
                相关资源
                最近更新 更多