我正在編碼槽編碼bat.com/atava並遇到一個我不明白的錯誤。我有兩個字符串數組,並想比較它們。如果我只是使用數組,所有工作正常(但結果是不正確的)。爲了獲得正確的結果,我編寫了一個輔助函數,它可以消除數組中的所有重複項。我測試了輔助函數,它返回了重複數組縮短的數組。例外:比較兩個不同字符串數組的兩個字符串時的java.lang.NullPointerException
我可以用_a[i]
等檢索新數組中的值,並且不會收到錯誤,但如果我使用_a[0].equals(_b[0]) or _a[0].compareTo(_b[0])
,我會得到一個NullPointerException (_a[0] == _b[0] works fine...)
。
如果我只是使用原始數組a,b代碼運行沒有問題。我不理解爲什麼我在那裏得到一個NullpointerException。
感謝您的幫助!
代碼:
public int commonTwo(String[] a, String[] b) {
String[] _a = killDuplicate(a);
String[] _b = killDuplicate(b);
int ai=0, bi=0,count=0;
for (int i = 0; ai < _a.length & bi < _b.length; i++){
if (_a[ai].compareTo(_b[bi]) > 0) { //NullPointerException here, but not if I use a,b
bi++;
} else if (_a[ai].compareTo(_b[bi]) < 0){ //NullPointerException here, but not if I use a,b
ai++;
} else {
count++;
ai++;
bi++;
}
}
return count;
}
輔助功能:
public String[] killDuplicate(String[] a){
String temp = "";
int counter = 0, counter2 = 0;
for (int i = 0; i < a.length; i++){
if (! a[i].equals(temp)){
temp = a[i];
} else {
a[i] = "";
counter++;
}
}
String[] result = new String[a.length - counter];
for (int i = 0; counter2 < counter; i++){
if (a[i].equals("")) {
counter2++;
}
} else {
result[i-counter2] = a[i];
}
return result;
}
該項目由'_a [AI]返回'或'_b [雙]'爲空,因此你的錯誤。 – Robadob
k,我的幫助函數似乎是錯誤的,我只是有一個糟糕的測試用例,它返回了一個正確的值,但它不適用於其他值。我嘗試修復它。編輯:是的幫助函數中的錯誤,請參閱下面的答案,謝謝 –