Я кодирую codingbat.com/java и сталкивался с ошибкой, которую я не понимаю. Я получил два массива String и хочу их сравнить. Если я просто использую массивы, все работает нормально (но результат неверен). Чтобы получить правильный результат, я запрограммировал вспомогательную функцию, которая устраняет все дубликаты массива. Я проверил вспомогательную функцию, она возвращает массив, сокращенный дубликатов.Исключение: 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;
}
Helper Функция:
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 [аи]' или '_b [би]' имеет нулевое значение, следовательно, ваша ошибка. – Robadob
k, моя вспомогательная функция кажется неправильной, у меня просто был плохой тестовый файл, который вернул правильное значение, но не для других значений. Я пытаюсь это исправить. Изменить: Да, ошибка в вспомогательной функции, см. Ответ ниже, спасибо в любом случае –