0

Не понимаю как исправить эту ошибку. введите сюда описание изображения

PokladnaApp:

private static void pridatZbozi() {
    System.out.println();
    System.out.println("Zadej kod zbozi");
    int kod = sc.nextInt();
    System.out.println("Zadej mnozstvi");
    int mnozstvi = sc.nextInt();
    pokladna.pridejPolozku(kod, mnozstvi); //
}

94 ряд это - pokladna.pridejPolozku(kod, mnozstvi);

Цикл Pokladna:

public void pridejPolozku(int kodZbozi, int mnozstvi) {
    try {
        for (PolozkaZbozi p : polozkyZbozi) {
            if (kodZbozi == p.getKod()) {
                polozkyZbozi.add(new PolozkaZbozi(p.getKod(),
                        p.getCena(), p.getIdSazbaDPH(), p.getPopis()));
            } else {
                System.out.println("Zkuste znovu");
            }
        }
    } catch (IllegalArgumentException e){
        System.out.println("Zadejte znovu");
    }
    uctenkaMnozstvis.add(new VypisUctenky(mnozstvi));
    /// записать количество
}
  • И как понять где 94 строка в коде? – Anton Sorokin May 08 '19 at 16:26
  • @AntonSorokin, pridatZbozi статический метод, который внутри себя обращается к глобальной для класса переменной sc. И скорей всего строка int mnozstvi = sc.nextInt(); и является этой 94 строкой. Переменная sc не определена на момент вызова, отчего и вылетает эксепшен – MiMEKiZ May 08 '19 at 16:31
  • 1
    объект pokladna на момент вызова pridejPolozku чему равен? Null? – MiMEKiZ May 08 '19 at 16:39
  • вместо pokladna.pridejPolozku(kod, mnozstvi); напишите new Pokladna.pridejPolozku(kod, mnozstvi); – Дмитрий May 08 '19 at 16:43
  • @Дмитрий он создает класс pridejPolozku, а мне этого не нужно – Fleeploed May 08 '19 at 16:49
  • @MiMEKiZ не понимаю ваш вопрос, в PokladnaApp я ввожу данные – Fleeploed May 08 '19 at 16:51
  • создает , разумется, а как вы без экземпляра класса хотите вызвать нестатический метод? – Дмитрий May 08 '19 at 16:53
  • 1
    @Fleeploed, в 94 строке вы обращаетесь к объекту pokladna, который не существует. Вам уже подсказали, что надо написать new Pokladna().pridejPolozku(..). Это создает временный объект. Без создания объекта типа Pokladna вы не сможете обратиться к не статическим методам этого класса. Если вам не надо создавать объект, делайте pridatZbozi не статическим, и из него вызывайте уже this.pridejPolozku(..) или просто pridejPolozku(..). – MiMEKiZ May 08 '19 at 17:07
  • 6
    кто вообще так переменные называет? – michael_best May 08 '19 at 18:04
  • Знаешь, что такое null pointer exception и с чем его едят? – Roman C May 08 '19 at 20:45

1 Answers1

0

Скорее всего, вы всего лишь создали ссылку на класс Pokladna (объект pokladna(pokladna)), но не указали, куда она должна вести, например она может вести на самого себя: Pokladna pokladna = new Pokladna(); или его суб-класс, (класс, который наследует наш класс), так же можно скопировать ссылке другой объект, клонировать другой объект (но это уже другая история), не забывая о статическом контексте, но тут он у вас соблюдается(объект класса Pokladna - статический). В итоге, static Pokladna pokladna; нужно заменить на static Pokladna pokladna = new Pokladna();, либо сделать это внутри метода pridejPolozku(), написав pokladna = new Pokladna();.