错误:'else'没有'if'

时间:2012-10-25 00:07:53

标签: java if-statement scope curly-braces

在没有if语句的情况下获取其他内容:

import java.util.Scanner;

public class LazyDaysCamp
{
    public static void main (String[] args)
    {
        int temp;
        Scanner scan = new Scanner(System.in);

        System.out.println ("What's the current temperature?");
        temp = scan.nextInt();
        if (temp > 95 || temp < 20);
            System.out.println ("Visit our shops");
            else if (temp <= 95)
                if (temp >= 80)
                System.out.println ("Swimming");
                else if (temp >=60) 
                    if (temp <= 80)
                    System.out.println ("Tennis");
                    else if (temp >= 40)
                        if (temp < 60)
                        System.out.println ("Golf");
                        else if (temp < 40)
                            if (temp >= 20)
                            System.out.println ("Skiing");                                                                                                                                                                                                                                                                   
    }
}

我需要使用级联,如果它看起来像那样。另外,如果我正确地进行了级联,你能告诉我吗?我无法找到一个很好的级联示例,如果是这样,我只是在知道级联意味着什么的情况下尽力而为。

LazyDaysCamp.java:14: error: 'else' without 'if'
            else if (temp <= 95)
            ^
1 error

这就是我得到的错误

4 个答案:

答案 0 :(得分:17)

删除此行末尾的分号:

if (temp > 95 || temp < 20);

请,请使用大括号! Java与不是类似Python,其中缩进代码会创建一个新的块范围。最好安全地使用它并且总是使用大括号 - 至少在你获得更多使用该语言的经验并准确理解你可以省略它们。

答案 1 :(得分:2)

问题是使用正常缩进的第一个if if (temp > 95 || temp < 20);

相同
if (temp > 95 || temp < 20)
{
}

即如果temp不在20和95之间,则执行空块。没有其他的可以做到这一点。

如果对应下一行,则其他行没有,因此产生错误

处理此问题的最佳方法是使用大括号来显示if之后执行的内容。这并不意味着编译器会捕获错误,但首先您更有可能通过查看缩进来查看任何问题,并且错误可能看起来更具可读性。但是,您可以使用eclipse,checkstyle或FindBugs等工具来告诉您是否使用过{}或使用空块。

更好的方法是,在重新测试事物时整理逻辑

if (temp > 95 || temp  < 20)  
{
  System.out.println ("Visit our shops");
} else if (temp >= 80)
{
    System.out.println ("Swimming");
} else if (temp >=60)
{ 
   System.out.println ("Tennis");
} else if (temp >= 40)
{
     System.out.println ("Golf");
} else if (temp >= 20)
{
   System.out.println ("Skiing");                                                                                                                                                                                                                                                                   
}

答案 2 :(得分:1)

我打算为你重新格式化。如果使用大括号,则永远不会出现此问题。

public class LazyDaysCamp
{
    public static void main (String[] args)
    {
        int temp;
        Scanner scan = new Scanner(System.in);

        System.out.println ("What's the current temperature?");
        temp = scan.nextInt();
        if (temp > 95 || temp < 20) //<-- I removed the semicolon that caused the error
        {
            System.out.println ("Visit our shops");
        }
        else if (temp <= 95)
        {
            if (temp >= 80)
            {
                System.out.println ("Swimming");
            }
            else if (temp >=60)
            {
                if (temp <= 80)
                {
                    System.out.println ("Tennis");
                }
                else if (temp >= 40)
                {
                    if (temp < 60)
                    {
                        System.out.println ("Golf");
                    }
                    else if (temp < 40)
                    {
                        if (temp >= 20)
                        {
                            System.out.println ("Skiing");
                        }
                    }
                }
            }
        }
    }
}

答案 3 :(得分:0)

发生此错误是因为您在if语句之后输入了分号。 在第12行的第一个if语句的末尾删除分号。

    if (temp > 95 || temp < 20);