2012-02-29 155 views
0

用戶輸入3個數字,我假設所有的都是正確的整數和不同的。我試圖讓程序打印出一個從最低值到最高值的序列。爲什麼我不在這裏工作?或者我在代碼中犯了一些明顯的錯誤?爲什麼不工作?

代碼不完整,我只寫了這麼多,然後測試它。當我輸入8然後是2然後輸入4時,我打算輸出2,3,4,5,6,7,8,但它不是。相反,它打印出4,5,6,7,8,

System.out.print("Enter a number: "); 
    int n1 = Integer.parseInt(in.readLine()); 
    System.out.print("Enter a number: "); 
    int n2 = Integer.parseInt(in.readLine()); 
    System.out.print("Enter a number: "); 
    int n3 = Integer.parseInt(in.readLine()); 

    if ((n1 > n2) | (n2 > n3)) { 
     for (int i = n3; (i <= n1); i++) { 
      System.out.print(i + ","); 
     } 
    } 
    else if ((n1 > n3) | (n3 > n2)) { 
     for (int i = n2; (i <= n1); i++) { 
      System.out.print(i + ","); 
     } 
    } 
    } 
} 
+0

8> 2,因此,您打到循環的第一個,而不是第二個。我認爲你的意思是成爲&&,而不是|。另外,|是按位進行的,所以這可能無法正確編譯,並且不太可能像預期的那樣起作用。 – Joel 2012-02-29 01:57:56

+0

這應該不會影響邏輯結果;他的條件沒有副作用。 – 2012-02-29 01:58:21

回答

3

大概在第一種情況下,你想說「n1大於n2,而n2大於n3」。但是,「和」運算符被寫爲&&,而不是|(它是位級別或「運算符」)。因此,您的第一個條件(n1 > n2)足以滿足第一個if,因此else不適用。

+0

感謝大家讓我意識到我犯了一個基本錯誤,與&&。對不起浪費你的時間,但無論如何感謝。 – user1215225 2012-02-29 02:15:01

2

java邏輯OR運算符是||,而不是|代表BITWISE OR

+0

這是一個很好的觀點,但只是做出改變並不能解決問題。 – duskwuff 2012-02-29 01:58:27

+0

是真的,upvoted你和amadan的答案,因爲他們更相關。 – 2012-02-29 02:00:18

3

你的邏輯有問題。當n1 = 8n2 = 2n3 = 4,n1 > n2爲真時,所以您的代碼將以第一個路徑結束(從n3循環到n1)。甚至沒有考慮到n3的值。請記住,如果按照當前的方法進行操作,則需要大約六個「else if」子句來處理所有可能的開始和結束變量組合。你可能有更好的運算來確定最小值和最大值是什麼,將它們分配給兩個變量,並循環這兩個值之間的值。它會爲你節省很多打字。