#java #user-interface #text #linked-list
#java #пользовательский интерфейс #текст #связанный список
Вопрос:
При попытке добавить пользователя, он просто выдает ошибку нулевого указателя на personList.AddPersonSort
. Пожалуйста, помогите.
import java.util.*;
/**
*en meny
* @author Henning
*/
public class Menutext
{
private PersonList personList;
/**
* mainMenu()
* skriver ut hovedmeny
* @param none
* @return none
*/
public void mainMenu()
{
System.out.println("*********************************");
System.out.println(" Main Menu");
System.out.println("");
System.out.println(" 1: Add a person");
System.out.println(" 2: Print all the persons");
System.out.println(" 3: End Program");
System.out.println(" Please choose an option! ");
}
public void question()
{ System.out.println("Would you like to proceed or quit?");
System.out.println("To proceed enter 9.");
System.out.println("If you wish to quit enter 0.");
Scanner sc = new Scanner(System.in);
switch (sc.nextInt())
{
case 0:
System.out.println ("Thank you and godbye.");
break;
case 9:
System.out.println ("Please proceed.");
new Menutext();
break;
default:
System.err.println ( "Unrecognized option" );
break;
}
}
/**
* Menu()
* Starter systemet. Dette will skrive ut en velkomst beskjed og starte
* en dialog med brukeren via en meny inntil brukeren avslutter dialogen
* @param none
* @return none
*/
public Menutext()
{
Scanner sc = new Scanner ( System.in );
mainMenu();
switch ( sc.nextInt() )
{
case 1:
newPersonMenu();
//question();
break;
case 2:
System.out.println("All the people in the list:n");
personList.toString();
question();
break;
default:
System.out.println ( "Unrecognized option" );
question();
break;
}
}
/**
* newPersonMenu()
* legger til en person
* @param none
* @return none
*/
public void newPersonMenu()
{
Scanner sc = new Scanner(System.in);
System.out.println("Please register a new person");
System.out.print(" Please write firstname: ");
String fn = sc.nextLine();
System.out.print(" Please write surname: ");
String sn = sc.nextLine();
System.out.print(" Please write birthyear: ");
int bir = sc.nextInt();
System.out.print(" Please write deathyear (or 0 if still alive): ");
int det = sc.nextInt();
//System.out.print(" You entered: " fn " " sn " (" bir "-" det ").");
personList.addPersonSort(fn, sn, bir, det);
question();
}
public class PersonList extends DNodeList<Person>
{
/**
* Constructor for objects of class LinkedListEvents
*/
public PersonList()
{
super();
}
/**
* lager en string representasjon av listen
*/
@Override
public String toString()
{
String listPerson = "";
if (!isEmpty())
{
listPerson = "Persons:n";
DNode<Person> hRef = header.getNext();
while (hRef != trailer)
{
listPerson = hRef.getIndex() " " hRef.getElement().getFirstName() " " hRef.getElement().getSurname() "(" hRef.getElement().getbirthyear() " - " hRef.getElement().getdeathyear() ")";
hRef = hRef.getNext();
if (hRef != trailer)
{
listPerson = "n";
}
}
}
else
{
listPerson = "No people registered.";
}
return listPerson;
}
/**
* legger til en person etter fødsels år
*
* @param fn fornavn
* @param sn etternavn
* @param bir fødselsår
* @param det året personen døde
*/
public void addPersonSort(String fn, String sn, int bir, int det)
{
DNode<Person> hRef = null;
if (isEmpty())
{
addLast(new Person(fn, sn, bir, det));
}
else
{
hRef = getFirst();
while (hRef.getNext().getElement().getbirthyear() < bir amp;amp; hRef.getNext() != trailer)
{
hRef = hRef.getNext();
}
addAfter(hRef, new Person(fn, sn, bir, det));
}
}
/**
*
*/
public Person searchPerson(String fn)
{
return search(fn).getElement();
}
/**
* søker etter hendelse
*
* @param desc hendelsen vi søker etter
* @return hendelsen om den er der
*/
public DNode<Person> search(String fn)
{
DNode<Person> hRef = header;
DNode<Person> e = null;
if (!isEmpty())
{
do
{
hRef = hRef.getNext();
}
while (!hRef.getElement().getFirstName().equalsIgnoreCase(fn));
if (hRef != trailer amp;amp; hRef.getElement().getFirstName().equals(fn))
{
e = hRef;
}
else
{
System.out.println("No such person.");
}
}
return e;
}
/**
* sorterer listen etter årstall
*/
public void sortPersons()
{
if (size() <= 1)
{
return;
}
DNode<Person> pivot;
DNode<Person> ins;
DNode<Person> end = (DNode<Person>) getFirst();
while(end != getLast())
{
pivot = end.getNext();
removeElement(pivot);
ins = end;
while (hasPrev(ins) amp;amp; ins.getElement().getbirthyear() > pivot.getElement().getbirthyear())
{
ins = ins.getPrev();
}
addAfter(ins, pivot.getElement());
if (ins == end)
{
end = end.getNext();
}
}
indexNodes();
}
}
@Override
public String toString()
{
String listPerson = "";
if (!isEmpty())
{
listPerson = "Persons:n";
DNode<Person> hRef = header.getNext();
while (hRef != trailer)
{
listPerson = hRef.getIndex() " " hRef.getElement().getFirstName() " " hRef.getElement().getSurname() "(" hRef.getElement().getbirthyear() " - " hRef.getElement().getdeathyear() ")";
hRef = hRef.getNext();
if (hRef != trailer)
{
listPerson = "n";
}
}
}
else
{
listPerson = "No people registered.";
}
return listPerson;
}
Это не дает никаких зарегистрированных пользователей после того, как я добавлю 1 человека в текстовый пользовательский интерфейс.
Ответ №1:
В Menutext вы должны инициализировать свой PersonList перед использованием.
private PersonList personList = new PersonList();
Комментарии:
1. Спасибо! больше нет указателя нуля. но теперь я получаю только «никто не зарегистрирован», когда пытаюсь распечатать его с помощью метода toString, который я добавил выше
2. @user733299 — stacker ответил на ваш вопрос, пожалуйста, примите его, поскольку вы сказали, что это решило проблему. Если у вас возникла другая проблема, вы можете опубликовать ее как отдельный вопрос. Пожалуйста, попробуйте в следующий раз немного больше форматировать свой код, чтобы глаза тех, кто пытается вам помочь, не вылезали из орбит 🙂
3. @user733299 Для отладки вашего кода вы должны установить точки останова или отслеживать выполнение с помощью одного шага и следить за своими переменными. Если вы не работаете с IDE, вы могли бы, по крайней мере, добавить несколько System.out.println, чтобы увидеть, какие переменные имеют значение null.