我正在制作咖啡订购系统。它需要用户的输入并计算他们的咖啡价格。要求的其中一个输入是“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无论如何。
答案 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 > 3
为true
,因此整个表达式为true
您需要使用括号更改优先顺序:
if(size == 1 && (syrupshots < 1 || syrupshots > 3)) {}
答案 1 :(得分:0)
正如一条评论所说,所有条件都会触发syrupshots
分配三个。此外,根据您的评论,我认为您没有正确地编写测试条件。
if(size == 1 && syrupshots <= 3)
^这是测试评论中所列检查的正确方法