Мне нужно проверить, что все элементы в моем List a
: положительные. Мой метод использует (пытается использовать) рекурсию для проверки элементов> 0.
Мое сообщение об ошибке жалуется, что список пуст. Мне явно не хватает чего-то простого здесь, поэтому, пожалуйста, помогите мне понять, что происходит.Почему мой список пуст?
static boolean allPositive(List a) {
// If list is empty, show a warning message.
if (a.isEmpty()){
System.out.println("No elements in list!");
}
// If both head and tail are less than 0, return false.
if (a.getHead() >= 0 && allPositive(a.getTail())) {
return true;
}
// If there are elements < 0, return false.
return false;
}
Вот класс List, довольно стандартный Я думаю:
public class List {
private boolean empty;
private int head;
private List tail;
// Constructor for List, creates a head and tail(another List).
public List(int head, List tail) {
this.empty = false;
this.head = head;
this.tail = tail;
}
public List() {
this.empty = true;
}
// To add tail when creating List.
public static List cons(int head, List tail) {
return new List(head,tail);
}
// Empty list.
public static List empty() {
return new List();
}
public boolean getEmpty() {
return this.empty;
}
public boolean isEmpty() {
return empty;
}
Ошибка говорит:
Исключение в потоке "главный" java.lang.IllegalStateException: Попытка голова пула пустого списка
Но список I Я использую здесь создается:
List a = List.cons(1, List.cons(2, List.cons(3, List.cons(4, List.empty()))));
«Внутренняя» функция не нужна. просто выпустите предупреждение и верните true, если список пуст. Только если вы хотите выбирать между тем, чтобы быть предупрежденным или нет внутри одной и той же программы, вам придется разделить (или добавить параметр «boolean verbose» или так далее). – Ronald
Как вы различаете пустой хвост каждого непустого списка и пустой список без «внутреннего» варианта функции? – user2684301
Спасибо, я вижу, что пустой список будет вызываться в конце рекурсивного процесса, поскольку он образует последний хвост. Мне кажется странным, что пустой список положителен, так как нуль не является ни + ve, ни -ve ?? Моя логика работает над проблемой, хотя теперь так снова спасибо. –