2015-01-07 27 views
0

我是Java新手我已經創建了一些代碼,用於確定輸入的單詞是否按升序排列。到目前爲止,我還沒有對布爾做任何事情,所以我不完全確定如何做到這一點。目前,無論是真是假,這個詞都是按升序排列的。計算出該單詞是否按升序排列的代碼

​​

感謝

+2

這裏有各種各樣的問題。首先,'=='用於比較,而不是'='。接下來,看*完全*你在比較什麼 - 'word.charAt(x)> = x'將位置「x」處的字符與位置本身進行比較......而不是與字符串中的任何其他字符進行比較。 –

+1

您需要比較一個字符和前一個字符。你正在比較你的角色和單詞中角色的位置。 – digitaljoel

+0

我正在使用BlueJ。我明白,比較是錯誤的,但我不知道如何與以前的角色進行比較? – Edwards

回答

0

您可能需要將word.charAt(x)與前一個字符進行比較。不是位置本身。

Boolean inOrder = true; 

while (inOrder) { 
    word = word.toLowerCase(); 
    char previous = word.charAt(0); 
    for (int x = 0; x < word.length() && inOrder ; x++) { 
     inOrder = word.charAt(x) >= previous; 
     previous = word.charAt(x); 
    } 

    if (inOrder) { 
     System.out.print(word + "letters in ascending order" + "\n"); 
    } else if (!inOrder) { 
     System.out.print(word + "letters not in ascending order" + "\n"); 
    } 

    System.out.print("#Please enter a word : "); 
    word = BIO.getString(); 
} 
+0

謝謝你的回答。這有幫助。然而,我現在遇到的問題是它並不總是有效,例如,如果輸入了xabcdefgh,它將顯示它仍然以升序排列。 – Edwards

+0

它將如何爲「xabcdefgh」返回true? –

+0

它顯示「xabcdefgh \t字母按升序排列」?請幫忙:( – Edwards

0

可以簡化這一明顯 - 只要遍歷單詞中的字符,比較每一個前一個,並立即返回false一旦你發現它是不是:

private static boolean isInOrder (String word) { 
    char curr; 
    char prev = word.charAt(0); 
    for (int i = 1; i < word.length(); ++i) { 
     curr = word.charAt(i); 
     if (curr < prev) { 
      return false; 
     } 
     prev = curr; 
    } 
    return true; 
} 
0

如果你在該行密切關注:

if (word.charAt (x) >= x) 

什麼你正在做的是將你的數字與x進行比較。

例如,假設我們有'apple',a = 97這個詞,你所做的是檢查97> 0,這是否正確。

在Java中是char是Unicode字符,因此當使用一個作爲int時,它們作爲它們的Unicode值出來。

在你的代碼中,基本上,每個單詞都會返回,因爲這個原因它會變大。請閱讀原始類型here