【问题标题】:Else Statement is a syntax error?Else 语句是语法错误?
【发布时间】:2014-03-04 16:36:23
【问题描述】:

我的代码对你们很多人来说可能是业余的,所以如果我其中的任何逻辑搞砸了,那也没关系。我稍后会解决这个问题。只是想知道是否有人可以让我知道为什么我的 else 语句会出现:“线程“main”java.lang.Error 中的异常:未解决的编译问题:令牌“else”上的语法错误,删除此令牌”

我在这里阅读了其他一些问题,通常问题是人们正在使用 else 检查条件 (else (blah

import java.util.Scanner;

public class minOfThree {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner kb = new Scanner (System.in);
        int num1, num2, num3, num4, min = 0;

        System.out.println ("Please enter three numbers.");
        System.out.print ("First value: ");
        num1=kb.nextInt();
        System.out.print ("Second value: ");
        num2=kb.nextInt();
        System.out.print ("Third value: ");
        num3=kb.nextInt();
        System.out.print ("Fourth value: ");
        num4=kb.nextInt();

        if (num1 < num2)
            if (num1 < num3)
                min=num1;
            else
                min=num3;
        else if (num2 < num3)
                min=num2;
            else
                min = num3;
        ***else*** {
            min = num4;
        }
        System.out.println ("Minimum value is: " + min);
    }
}

【问题讨论】:

  • 导致错误的else似乎没有对应的if
  • 你真的应该使用大括号。特别是如果您遇到这样的错误。
  • 好的。是的,我对此有点草率。我修复了它,但又出现一两个错误。不过现在正在努力。谢谢!
  • 永远不要省略大括号。绝不。我知道你可以。知道一些 C 习语使用它。但是如果你总是使用大括号并且总是正确缩进,你会避免很多问题。

标签: java if-statement syntax syntax-error


【解决方案1】:

如果您正确使用{},则可以避免这种情况:

if(num1 < num2) //"if" for if-else #1
{
    if(num1 < num3) //"if" for if-else #2
    {
        min=num1;
    }
    else //"else" for if-else #2
    {
        min=num3;
    } //complete end of if-else #2
}
else if(num2 < num3) //"else if" for if-else #1
{
    min=num2;
}
else //"else" for if-else #1
{
    min = num3;
} //complete end of if-else #1
else //"else" for nonexistent if-else == error
{
    min = num4;
}

在这里您可以看到在一个 if-else 语句中有两个 elses。

要修复它,请使用以下内容:

min = Integer.MAX_VALUE; //minimum = maximum possible
if(num1 < min) //if num1 is less than current minimum...
{
    min = num1; //current minimum = num1
}
if(num2 < min) //if num2 is less than current minimum...
{
    min = num2; //current minimum = num2
}
if(num3 < min) //if num3 is less than current minimum...
{
    min = num3; //current minimum = num3
}
if(num4 < min) //if num4 is less than current minimum...
{
    min = num4; //current minimum = num4
}

【讨论】:

    【解决方案2】:

    每个 if/else if 只能有一个 else。 else if (num2 &lt; num3) 部分已经有一个 else 语句在它下面两行。也许您在某处遗漏了 if 语句?

    【讨论】:

    • 你说的是格式吗?因为它不在 else if 语句中。除非我只是误解了你在说什么。看起来星号使它看起来像是在 else if 语句中。
    • 不,我说的是代码本身,而不是格式。仔细看看我指出的部分。我告诉你的else 已经终止了顶级if 语句。 ***else*** 没有匹配的 if
    【解决方案3】:

    养成总是在括号内写 if-else 语句的习惯,那么您将永远不必怀疑哪个语句与哪个测试相匹配。我相信您希望您的代码如下所示:

    if (num1 < num2) {
        if (num1 < num3) {
            min = num1;
        } else {
            min = num3;
        }
    } else {
        if (num2 < num3) {
            min = num2;
        } else {
            min = num3;
        }
    } else {
        min = num4;
    }
    

    虽然这并不完全有意义,因为在这里你也会得到两个 elses。

    【讨论】:

    • 是的,我的错。有时我倾向于对代码有点草率。谢谢!
    • 我知道很难猜测 OP 想要什么,但我不确定发布语法无效的代码是个好主意。 Prehaps 将中间的 else 组合到 if 中(使其成为 else if(num2 &lt; num3)...)
    【解决方案4】:

    这是因为 else if 没有创建新的 if/else 分支。这是编译器如何解释它的正确缩进。

        if (num1 < num2)
            if (num1 < num3)
                min=num1;
            else
                min=num3;
        else if (num2 < num3)
            min=num2;
        else
            min = num3;
        else
            min = num4;
    

    如您所见,这不是您想要的。因此,由于只允许使用一个 else 语句,因此无法编译。如前所述,您应该使用大括号。

    【讨论】:

    • 啊!谢谢!这很有意义,我立即修复了它。谢谢!
    • 昨天刚刚获得投票权。现在就这样做!
    【解决方案5】:

    如果是我,我会使用大括号并继续前进;-)

    if () {
      // hack
    } else if () {
      // hack hack
    } else {
      // hack hack
    }
    

    但是,您使用的逻辑也是错误的,您可以将最后一个 else 替换为

    if (min > num4) {
      min = num4; 
    }
    

    【讨论】:

      【解决方案6】:

      据我所知,如果您不在一个范围内编写多行(即 if-else 语句),则不需要 {}

      if (num1 < num2)              //1st If Start
              if (num1 < num3)          //2nd If Start
                  min=num1;
              else
                  min=num3;             //2nd If Ends
          else if (num2 < num3)         //3rd If starts in else part of 1st If
                  min=num2;
              else
                  min = num3;           //3rd If Ends
          ***else*** {              //This else part is not followed by any If Statement (Causes Error )
              min = num4;
          }
      

      在这种情况下,您的方法是正确的,但是您错过了最后一个 else 的起点。

      希望对你有帮助。

      【讨论】:

        【解决方案7】:

        你的逻辑很业余,但没关系?您正在使用两个 Else 语句。这是没有意义的。而且你没有括号来封装真正令人困惑的例程。你到底想做什么?你想找到最小的数字吗?试试这个?

        public static void main(String[] args){
        
            int num1 = 4;
            int num2 = 2;
            int num3 = 3;
            int num4 = 10;
        
            int array[] = {num1, num2, num3, num4};
        
            for (int i = 0; i < array.length; i++)
            {
                for (int j = 0; j < array.length-1; j++)
                {
                    if (array[j] > array [j+1])
                    {
                        int x = array[j];
                        array[j] = array [j+1];
                        array [j+1] = x;
                    }
                }
            }
        
            for (int i = 0; i < array.length; i++)
            {
                System.out.println(array[i]);
            }
        }
        

        【讨论】:

          【解决方案8】:

          在这种情况下是的,因为没有第二个 else 子句的意义。这将是无法访问的代码

          【讨论】:

            【解决方案9】:

            查看第一个 if 语句。你没有放牙套和其他你犯的错误。就像将两个 else 语句放在一个 if 语句中一样。

                import java.util.Scanner;
            
            public class StackOver {
            
                    /**
                     * @param args
                     */
                    public static void main(String[] args) {
                        // TODO Auto-generated method stub
                        Scanner kb = new Scanner (System.in);
                        int num1, num2, num3, num4, min = 0;
            
                        System.out.println ("Please enter three numbers.");
                        System.out.print ("First value: ");
                        num1=kb.nextInt();
                        System.out.print ("Second value: ");
                        num2=kb.nextInt();
                        System.out.print ("Third value: ");
                        num3=kb.nextInt();
                        System.out.print ("Fourth value: ");
                        num4=kb.nextInt();
            
                        if (num1 < num2){
                            if (num1 < num3)
                                min=num1;
                            else
                                min=num3;
                        }else if (num2 < num3)
                            min=num2;
                        else if(num4 < num3)
                            min = num4;
                        else
                            min = num3;
                        System.out.println ("Minimum value is: " + min);
                    }
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-08-30
              • 2020-12-09
              • 1970-01-01
              • 2020-09-20
              • 2018-12-22
              相关资源
              最近更新 更多