compareTo () Java Быстрый вопрос - PullRequest
0 голосов
/ 25 мая 2011

У меня есть этот метод в моем коде

public boolean has(AnyType x){

        for(int i=0; i<items.length; i++)
            if(items[i] == x)
                return true;

        return false;
    }

, и я хочу переписать оператор if, чтобы использовать метод compareTo (), и в соответствии с тем, что я помню, он должен выглядеть примерно так:

if(items[i].compareTo(x) == 0)

Но это дает мне ошибку

Exception in thread "main" java.lang.NullPointerException

Любые идеи о том, что я могу делать неправильно ??

Ответы [ 3 ]

3 голосов
/ 25 мая 2011

Один из ваших предметов [] пуст.Проверьте правильность установки элементов в ненулевые значения.

2 голосов
/ 25 мая 2011

Исключение NullPointer генерируется, когда приложение пытается использовать нулевое значение в случае, когда требуется объект. Проверьте с вашими items[i] значениями. Одно из значений должно быть нулевым, поэтому компилятор выбрасывает NullPointerException.

if(items[i].compareTo(x) == 0)

Когда вы делаете это, вы пытаетесь сравнить нулевое значение с x, которое действительно выдает NullPointerException.

Проверьте для теста not-a-null-value. Попробуйте это,

public boolean has(AnyType x){

      for(int i=0; i<items.length; i++) {
            if(items[i] != null && items[i] ==x)
                   return true;
         return false;
    }
 }
1 голос
/ 25 мая 2011

Один из ваших предметов является нулевым, вы можете проверить его, прежде чем пытаться позвонить compareTo.

Вы также можете использовать расширенный цикл for:

public boolean has(AnyType x){
    for( AnyType n : items ) {
        if( ( n == null && n == x )  || 
            ( n != null && n.compareTo( x ) == 0  ) ) { 
            return true;
        }
     }
     return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...