2015-09-30 43 views
-2

我正在製作咖啡訂購系統。它需要用戶輸入並計算咖啡的價格。其中一個要求是「syrupshots」。即使用戶根據咖啡的大小正確選擇了一個數字,該代碼也會使syrupshots = 3。If-else語句,始終運行

//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無論如何。

+4

每個條件計算爲'syrupshots = 3;'。 – npinti

+0

它只是表示您的尺寸等於1,糖漿小於1 – sparsh610

回答

0

正如一條評論所說,所有條件觸發syrupshots被分配三個。另外,從你的評論來看,我認爲你沒有正確寫下你的測試condiiotns。

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

^這將是測試您的評論

2

並非總是如此,有時它返回1或2,但從來沒有> 3,喜歡它看起來像它應該列出的檢查有道。

你的問題是邏輯運算符的優先級。例如:

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

如果尺寸= 3和syrupshots = 5(有效的組合),則仍然進入這個if塊因爲& &首先計算:

size == 1 && syrupshots < 1 

並且等於false ,所以你已經離開(false || syrupshots > 3)

但是那麼||評估,syrupshots > 3true,所以整個e上的表達是true

您需要使用括號來改變優先順序:

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