2015-03-13 71 views
2

我正在做一個家庭作業,需要我比較兩個字符串,並確定它們是否按字母順序排列。我打算寫一個方法,將採取兩個字符串作爲參數(字符串a,字符串b)並返回1,0或-1(所以,一個int)信號是否a> b,< b或其他情況(0情況)。排序算法沒有使用compareTo

例如,比較(「boogie」,「orange」)會返回-1。自從,布吉<橙色。

到目前爲止我的代碼是

public static int compare(String a, String b) { 
    for (int i = 0; i < a.length(); i++) { 
     for (int j = 0; j < b.length(); j++) { 
      char cha = a.charAt(i); 
      char chb = b.charAt(j); 
      if (cha < chb) { 
       return -1; 
      } else if (cha > chb) { 
       return 1; 
      } 
     } 
     return 0; 
    } 
} 

不過,我遇到了許多錯誤,無法找到的bug修復。我也很難找到一個代碼來測量一個單詞是否比另一個單詞長(這會影響字母順序)有人可以幫我調試代碼並指向正確的方向嗎?

非常感謝提前。

+1

如果您收到錯誤,**總是**發佈它們。不要讓我們坐在這裏猜猜! – tnw 2015-03-13 19:41:49

+2

「我也很難找到一個代碼來衡量,如果一個單詞比另一個長(這會影響字母順序)」...長度()? – Tetramputechture 2015-03-13 19:42:23

+0

當你說這兩個單詞之間的字母順序是什麼意思:每個單詞的第一個字母?所有字母相互比較?現在你只比較每個單詞中的第一個字符,因爲只要你有一個匹配'cha> chb'或'cha 2015-03-13 19:43:39

回答

2

您不需要嵌套循環,因爲您不想將一個字符串的每個字符與另一個字符串的每個字符進行比較。

你只需要一個循環:

public static int compare(String a, String b) 
{ 
    int len = Math.min (a.length(),b.length()); 
    for (int i = 0; i<len; i++) { 
     char cha = a.charAt(i); 
     char chb = b.charAt(i); 
     if (cha < chb) { 
      return -1; 
     } else if (cha > chb) { 
      return 1; 
     } 
    } 
    if (a.length() < b.length()) 
     return -1; 
    else if (a.length() > b.length()) 
     return 1; 
    else 
     return 0; 
} 

對於處理不同長度的字符串,如果您發現2個字符串的短等於長字符串的前綴,則返回-1如果a是較短的字符串,並且1如果b較短(因爲較短的字符串應該在較長的字符串之前)。

+0

可以通過'<' or '>'比較字符嗎? – Apurva 2015-03-13 19:45:59

+0

@Apurva字符的整數值介於0和2^16-1之間,因此它們可以與< or >進行比較。 – Eran 2015-03-13 19:49:06

+0

是的,在Java中,您可以將字符與<,>,<=,> =,==等進行比較,就像Integers一樣。 – 2015-03-13 19:49:34

-1

您可以使用' - '運算符而不是'>'來比較兩個字符。 例如下面。

public static int compare(String a, String b) { 
    return a.charAt(0) - b.charAt(0); 
} 

在你的情況,這樣的事情。

public static int compare(char cha, char chb) { 
    if (cha-chb < 0) { 
     return -1; 
    } else if(chb - cha > 0){ 
     return 1; 
    } else if(chb - cha == 0){ 
     return 0; 
    } 
    return 0; 
}