Это мой код. Я уверен, что я просто делаю неосторожную ошибку здесь, но я откладывал, и я делаю это среди ночи, так что я немного испорчен. Я пытаюсь создать объект, который генерирует перестановки в списке. Мой учитель в основном сказал нам, что каждый метод должен делать, я пытался перевести именно то, что он сказал. Однако, когда я пытаюсь проверить его с помощью основной функции, я получаю исключение с нулевым указателем в строках 21, 22 и 35. Это инструкции.Получение исключения null указателя наряду с несколькими другими проблемами в программе перестановок? (Java)
- (Базовый вариант> Если я объект Перестановки длины списка 0, не делать ничего, кроме отметить, что я всегда должен возвращать ложь, когда hasNext() называется.
- (Рекурсивный случай) Удалить и запомнить первый элемент (c) из списка.
- Создайте и запомните новый объект Permutations (P) с оставшимся списком.
- Получите и запомните первую перестановку (L) от этого нового объекта или пустой список, если он не имеет значения (потому что это размер 0).
- Инициализировать индексный счетчик (i) до 0. Каждый раз, когда метод next() вызывается в объекте Permutations, он должен делать следующее:
- Верните копию L с c, вставленную в позицию i. Увеличение i.
- Как только я становится слишком большим, установите L в P.next() и сбросьте значение i до 0.
Если P не имеет следующей перестановки, то этот объект также будет завершен. hasNext() должен возвращать false здесь.
public class Permutations<E> //I know indentation is wrong here { // Couldn't get it to show as code unless it was like this E c; // First Element Permutations <E> P; // Are these the problem? List <E> L; // ? int i; boolean hasNext = true public Permutations(List<E> list) { if(list.size() == 0) { hasNext = false; } else { c = list.get(0); list.remove(0); P = new Permutations<E>(list); // Line 21 L = P.next(); // Line 22 i = 0; } } public boolean hasNext() { if(hasNext == false) return false; else return true; } public List<E> next() { if(hasNext()) { L.add(i, c); // Line 35 ArrayList<E> newList = new ArrayList<E>(); for(int k=0; k<L.size(); k++) { newList.add(k, L.get(k)); } i++; if(i >= L.size()) { L = P.next(); i = 0; } System.out.println(newList); return newList; } else { return L; } } }
Я понимаю, что метод hasNext действительно кажется излишним, но мы должны иметь его там. Кроме того, он говорит, что когда в объекте вызывается следующий метод, он должен возвращать новую копию списка, а затем делать все остальное, но я смущен этим, потому что, если он возвращается первым, как другие части метода должен быть достигнут? Спасибо заранее.
Edit: Кроме того, это главный тест, который я пытался использовать:
public static void main(String[] args)
{
List<Integer> myList = new ArrayList<Integer>();
myList.add(1);
myList.add(2);
myList.add(3);
Permutations<Integer> perm = new Permutations<Integer>(myList);
}