if-else语句,始终运行

时间:2015-09-30 16:11:56

标签: java if-statement

我正在制作咖啡订购系统。它需要用户的输入并计算他们的咖啡价格。要求的其中一个输入是“syrupshots”。即使用户根据咖啡的大小正确选择了数字,此代码也会使syrupshots = 3。

//if size == tall   syrup shots <=3
if(size == 1 && syrupshots < 1 || syrupshots > 3)
{
    syrupshots = 3;
}
//else if size == medium     syrup shots <=5
else if(size == 2 && syrupshots < 1 || syrupshots > 5)
{
    syrupshots = 3;
}
//else if size == Venti        syrup shots <=7
else if(size == 3 && syrupshots < 1 || syrupshots > 7)
{
    syrupshots = 3;
}
System.out.println(syrupshots);

我不确定为什么syrupshots总是= 3无论如何。

2 个答案:

答案 0 :(得分:2)

并非总是如此,有时它会返回1或2.但是从不&gt; 3,就像它看起来一样。

您的问题在于逻辑运算符优先级。例如:

if(size == 1 && syrupshots < 1 || syrupshots > 3) {}

如果size = 3且syrupshots = 5(有效组合),则仍会输入此if块,因为&amp;&amp;首先评估:

size == 1 && syrupshots < 1

并且等于false,因此您已离开(false || syrupshots > 3)

然后评估||syrupshots > 3true,因此整个表达式为true

您需要使用括号更改优先顺序:

if(size == 1 && (syrupshots < 1 || syrupshots > 3)) {}

答案 1 :(得分:0)

正如一条评论所说,所有条件都会触发syrupshots分配三个。此外,根据您的评论,我认为您没有正确地编写测试条件。

if(size == 1 && syrupshots <= 3)

^这是测试评论中所列检查的正确方法