Добавить определенное значение в arraylist к другому arraylist

там! Я работаю над своей школьной работой, и я новичок в Java. Я пишу программу, в которой есть список ArrayList под названием petshop. зоомагазин состоит из резидентов объекта.

У жителей объекта есть поля, такие как имя, день рождения, почтовый индекс и домашнее животное (домашнее животное, которое есть у резидента). Ниже приводится пример объекта «Жители»: имя Ян день рождения 11.11.1991 почтовый индекс 2222 собака кошка свинья

Я пишу метод, чтобы узнать, сколько разных видов домашних животных охватывает запись. Я думаю, что добавить запись о домашнем животном из petshop в новый String Array Pet и очистить повторяющееся значение. вот мой код:

public void addpets() {
        Set<String>cleanpets = new HashSet<>();
        
    
        for(int i=0; i<petshop.size();i++)
        {           
            String[]pet = petshop.get(i).getPetown().split("");
     
            for(int j=0; j<pet.length; j++)
            {
                pets.add(pet[j]);
            }
        }   
    
            cleanpets.addAll(pets);
            pets.clear();
            pets.addAll(cleanpets);
        }

Pets - это новый String ArrayList, который я инициализировал в том же классе. Когда я запускаю всю программу, консоль всегда показывает исключение в потоке "main" java.lang.NullPointerException со строкой: pet = petshop.get (i) .getPetown (). Split ("");

Не понимаю, где не так. Или есть другой способ сделать это?

Я знаю, в чем проблема. Потому что, если у жителей есть только одно домашнее животное, String [] pet = petshop.get (i) .getPetown (). Split (""); не будет работы.

petshop определяется вне этого метода? Обычно NullPointerException выдается, когда что-то не определено, и вы пытаетесь получить к нему доступ. В этом случае это может быть из-за того, что вы пытаетесь сослаться на переменную petshop, но она не передана в качестве параметра и не создана где-либо в области действия этого метода.

Tyler 26.10.2018 06:59

Привет, Тайлер, я проверил, зоомагазин определен внутри этого класса.

lll 26.10.2018 07:12
0
2
25
1

Ответы 1

Не видя других ваших методов, трудно понять, что не так, но я предполагаю, что вы помещаете его в массив, поскольку это строка, которая вызывает исключение.

Вы запускаете массив как String[]pets;, но вы не используете ключевое слово new, чтобы фактически создать массив или указать его размер; все, что у вас есть, это имя pet. Когда вы делаете это с переменной, которая не является примитивным типом (посмотрите это, если вы не знаете, что это такое), вы, по сути, создаете ссылку. Но ваша ссылка (в настоящее время называется pet) ни к чему не относится, потому что вы не устанавливаете ее ни на что. Чтобы исправить это, скажем, String[] pet = new String[insert_size];, чтобы pet фактически ссылался на массив, который может содержать переменные String.

спасибо за ответ. Я пробовал этот способ, но он все равно не работает.

lll 26.10.2018 07:36

Другие вопросы по теме