NullPointerException в условии if

129
03 февраля 2021, 09:00

В классе 3 метода: save, get и delete

public class Storage {
Somedata[] storage = new Somedata[5];
int i = 0;
void save(Somedata r) {
    i++;
    storage[i - 1] = r;
}
Somedata get(String uuid) {
    int j;
    for (j=0; j < storage.length; j++) {
        if (storage[j].uuid == uuid) {
            return storage[j];
        } else return null;
    }
    return storage[j];
}
void delete(String uuid) {
    for (int m=0; m < storage.length; m++) {
        if (storage[m].uuid == uuid) {
            storage[m]=null;
        }
    }
   }
  }

Соответственно, создают, достают и удаляют объекты класса Somedata из массива storage; Метод, из которого должны вызываться методы

 public class MainArray {    
public static void main(String[] args) throws IOException {
 private final static Storage STORAGE = new Storage();
        String uuid = null;
   // Подробности ввода uuid через System.in опущены //
            case "save":
                r = new Somedata();
                r.uuid = uuid;
                STORAGE.save(r);
                break;
            case "get":
                System.out.println(STORAGE.get(uuid));
                break;
            case "delete":
                STORAGE.delete(uuid);
                break;             
   }    
  }

Для условия if (storage[m].uuid == uuid) метода delete выдает ошибку NullPointerException

Но метод get работает без ошибки. В нем реализовано такое же условие if (storage[m].uuid == uuid) И на него NullPointerException не выскакивает...

Answer 1

ты возвращаешь первый элемент если он подходит, или null если не подходит

Somedata get(String uuid) {
    int j;
    for (j=0; j < storage.length; j++) {
        if (storage[j].uuid == uuid) {
            return storage[j];
        } 
    }
    return null;
}
Answer 2

да, но ты забыл про пустые места в своем хранилище!

void delete(String uuid) {
  int m;
  for (m=0; m < storage.length; m++) {
      if (storage[m]!=null && storage[m].uuid == uuid) {
          storage[m]=null;
          return;
       }
    }
 }
Answer 3

Нашел ошибку. Надо было прервать цикл, чтобы он не дошел до null-элементов. Реализовал это через break;

  void delete(String uuid) {
    int m;
    for (m=0; m < storage.length; m++) {
     if (storage[m] != null) {
        if (storage[m].uuid == uuid) {
            storage[m]=null;
            break;
           }
         }
      }
   }
READ ALSO
Не отрабатывает Scanner во второй раз [дубликат]

Не отрабатывает Scanner во второй раз [дубликат]

Есть метод добавления товара в корзину, когда вызываю его в первый раз, всё отрабатывает корректно, когда вызываю второй раз в product ничего...

127
Какой командой можно проверить, есть ли в компьютере файлы?

Какой командой можно проверить, есть ли в компьютере файлы?

нужна команда(ы), которые смогут проверить, есть ли ф указаном пути, файлы, разных расшрений, или просто, чтобы по имени файлов нашло их

113
Взаимная блокировка

Взаимная блокировка

Главный поток входит в монитор объекта AСоперничающий входит в монитор объекта B

100
HQL getSingleResult с подзапросом

HQL getSingleResult с подзапросом

Пытаюсь написать запрос на hql, который вернет одну цифру методом getSingleResult(), все вполне сносно работало до тех пор, пока не появилась нужда...

119