2015-09-17 75 views
-9

有誰知道爲什麼第一個條件被Java跳過?爲什麼Java在while循環中跳過我的第二個條件?

while((withdraw % 100) != 0 && (withdraw > startBalance)) 

雖然我的狀態,撤離必須小於startBalance,你仍然可以鍵入一個數字,比startBalance和該newBalance將是負面的更高。

這裏是我的代碼:

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    int startBalance = 1000; 
    System.out.println("Please enter how much you want to withdraw: "); 
    int withdraw = input.nextInt(); 

    while((withdraw % 100) != 0 && (withdraw > startBalance)){ 
    System.out.println("Sorry, you can only withdraw a value multiple of 100 (we only have 100 SEK bills): "); 
    withdraw = input.nextInt(); 
    } 

    int newBalance = startBalance-withdraw; 
    System.out.println("Thanks! Your new balance is: SEK " + newBalance); 
} 
+0

使用&代替&&如果您想要評估第二個條件 – borchero

回答

4

如果第一個條件爲假,則它不會考慮第二個條件。如果第一個條件是真的,那麼它也會評估第二個條件。這是因爲您正在使用& &操作。如果你使用||那麼如果第一個是假的,它將評估下一個條件。

+0

@ T.J.Crowder nextInt();照顧你可以做到這一點你不能做到這一點nextInt(); nextLine();然後nextInt();再次,你需要清除新線。 – StackFlowed

+0

通常的問題是'nextInt()'無法解析,但重試一個循環而不清除無效輸入。 –

+0

@StackFlowed:謝謝。 :-) –

0

試試這個代碼:

import java.util.Scanner; 

public class Balance { 

    public static void main(String[] args) { 

      Scanner input = new Scanner(System.in); 
      int startBalance = 1000; 
      System.out.println("Please enter how much you want to withdraw: "); 
      int withdraw = input.nextInt(); 

      while((withdraw % 100) != 0 || (withdraw > startBalance)){ 
      System.out.println("Sorry, you can only withdraw a value multiple of 100 (we only have 100 SEK bills): "); 
      withdraw = input.nextInt(); 
      } 

      int newBalance = startBalance-withdraw; 
      System.out.println("Thanks! Your new balance is: SEK " + newBalance); 
     } 
} 

我用

|| (或)

,而不是

& &(和)

,因爲我們總是需要檢查用戶是否有足夠的餘額:)

+0

謝謝!我修正它就像你做的一樣。我是編程新手,這就是我犯這類錯誤的原因。 –

3
while((withdraw % 100) != 0 && (withdraw > startBalance)) 

讓我讀出你的情況以純的話:

「保持只要這些條件都保持循環:

  • 所請求的量不是圓形;
  • 它大於開始平衡。」

所以,我們說,我們要求100萬。它是‘不圓’?不。這兩個條件都成立嗎?不可以因此,循環結束。

作爲一個方面來看,這已經無關&&&或評估的秩序之間的區別。它只是普通的,常識性的邏輯。

+0

感謝您的解釋!我是編程新手,這就是爲什麼我犯這些愚蠢的邏輯錯誤。 –

0

我的假設是你不希望循環檢查100的模%是否不等於AN D的取款幅度大於起始餘額。

雙「&」符號&&檢查兩個參數是否都爲真,除非您的起始餘額小於0,否則將永遠不會滿足while循環的條件。

因此,您要使用或運營商||這將檢查是否滿足您正在尋找哪一個或其他條件。

變化:while((withdraw % 100) != 0 && (withdraw > startBalance))

要:while((withdraw % 100) != 0 || (withdraw > startBalance))

這將解決您的問題。

相關問題