2014-11-03 40 views
0

我有一個自定義的比較方法:自定義比較字符串的方法拋出indexarrayoutofbounds

public int compareStrings(String one, String two) { 
    int compareAmount = 0; 
    if (one.length() == two.length()) { 
     compareAmount++; 
    } else { 
     compareAmount--; 
    } 
    int x = 0; 
    for (char i : one.toCharArray()) { 
     if (!(x > two.length())) { 
      if (two.charAt(x) == i) { 
       compareAmount++; 
      } 
      x++; 
     } 
    } 
    return compareAmount; 
} 

如果串一個是「OK」和字符串二是「讓我們給它一個去」它拋出java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:2.我看不出我出錯了!

回答

1

你會一直到two.length(),而不是停在two.length() - 1。這不起作用,因爲數組索引從0..length()-1
只要改變回路內的if條件來解決這個問題:

if (!(x >= two.length())) { 
+0

雖然你可能會回答這個問題,但這對於要求在編程方面更好的人來說並不會有幫助 – 2014-11-06 12:30:01

+1

@David:我很尊敬地不同意。我想OP在這裏學到了關於數組的東西,這在未來應該會有所幫助。 – Keppil 2014-11-06 12:48:21

+0

聽起來很合理。我的歉意 – 2014-11-06 13:28:56

0

如果String兩個長度爲11,最後的指數爲10。你只是檢查,如果X小於等於更大兩個長度。但它可能是平等的,這是超出界限。只需將其更改爲> =

0

老兄,首先,不要重新實現這種算法。

使用String類中定義的compareTo(String)方法。

您也可以從JDK的源代碼學習,看看他們是如何實現這個方法http://hg.openjdk.java.net/jdk7u/jdk7u6/jdk/file/8c2c5d63a17e/src/share/classes/java/lang/String.java#l1096

如果你需要一個特定類的自定義比較,你必須實現Comparator接口。

如果您正在開始學習java並想要學好它。至少要全面閱讀由oracle編寫的官方Java教程

+0

我使用了compareTo方法,但發現它不可用。它爲我返回了奇怪的結果。 – user3448331 2014-11-05 16:43:01

+0

提供如何「奇怪」的例子。我100%肯定字符串函數的構建確實按預期工作。 – 2014-11-06 12:28:41