0

我的程序又遇到了同样的问题。

这次的问题是程序在 59 到 20 之间没有输出任何内容。程序只是终止了。据我所知,所有 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 ("It's good weather for swimming");
            } else if (temp >=60) 
                if (temp < 80)
                {
                    System.out.println ("It's good weather for tennis");
                } else if (temp >= 40)
                    if (temp < 60)
                    {
                        System.out.println ("It's good weather for golf");
                    } else if (temp >= 20)
                        if (temp < 40)
                        {
                            System.out.println ("It's good weather for skiing"); 
                        }
                    }
                }                                                                                                                                                                                                                                                                  
            }
        }
    }
}

正如有人指出的那样,我知道 if 语句有点过分,但我必须这样做(级联 if)。否则我会使用逻辑运算符。

这是输出:

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
100
Visit our shops!

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
85
It's good weather for swimming

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
70
It's good weather for tennis

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
50

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
30

 ----jGRASP: operation complete.

 ----jGRASP exec: java LazyDaysCamp

What's the current temperature?
15
Visit our shops!

 ----jGRASP: operation complete.
4

3 回答 3

2

您的问题出在 else 语句中。例如,当您尝试“50”时

else if (temp >=60) 

该语句返回 false,甚至没有转到下面的 if 语句,这意味着它没有机会跟随该语句的 else 得到正确的结果。

我建议只删除所有其他的并只使用 if 语句。

于 2012-10-25T01:05:18.487 回答
1

您的某些 if 语句没有大括号来表示它们的条件块。这使得很难确定您实际要完成的工作。在 Java 中,如果下一行包含应该执行的语句,则可以在 if 语句之后省略大括号。在您的场景中并非如此,并且上述约定不是最佳实践。我建议在整个条件语句中使用大括号来表示它们的分隔。

于 2012-10-25T00:54:38.607 回答
1

请注意,您的一些 if 语句是不必要的。如果温度是>= 80,它只能是< 80您检查它时的那个点< 80。这样做几次。

问题是你的 else-if 语句被放置为这些不必要的 if 语句的替代品,这些语句总是正确的。结果,甚至永远不会评估 else-if 条件。

if (temp < 80) // this is unnecessary because it's previously checked, and is always true
{
    System.out.println ("It's good weather for tennis");
}
else if (temp >= 40) // this is attached to the true-if and therefore isn't evaluated
于 2012-10-25T00:56:45.243 回答