Else Statement是语法错误?

时间:2014-03-04 16:36:24

标签: java if-statement syntax syntax-error

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

我在这里阅读了一些其他问题,通常问题是人们正在检查条件(否则(blah< bleh){)与else,但我没有这样做。

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

9 个答案:

答案 0 :(得分:8)

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

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语句中有两个else

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

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
}

答案 1 :(得分:7)

每个if / else if只能有一个。 else if (num2 < num3)部分已在其下方两行显示else语句。也许你错过了某个地方的if语句?

答案 2 :(得分:3)

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

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

但是,你使用的逻辑也是错误的,你可以用

代替你的最后一个
if (min > num4) {
  min = num4; 
}

答案 3 :(得分: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;
}

虽然这没有充分意义,因为在这里你也会得到两个else

答案 4 :(得分:3)

这是因为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 :(得分:2)

据我所知,如果你没有在范围内写多行(即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;
    }

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

希望它会对你有所帮助。

答案 6 :(得分:2)

你的逻辑是业余的,但没关系?您正在使用两个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]);
    }
}

答案 7 :(得分:1)

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

答案 8 :(得分:1)

查看第一个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);
        }
}