2011-05-01 28 views
1

当试图添加人员时,它只会在personList.AddPersonSort处表示空指针错误。请帮忙。Java - 通过文本UI将人员添加到链接列表

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 && 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 && 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) && 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个人后,它不会给任何人注册。

回答

2

在Menutext中,您应该在使用之前初始化您的personList。

private PersonList personList = new PersonList(); 
+0

谢谢!没有更多的空指针。但现在当我尝试使用上面添加的toString方法打印时,我只收到“没有人注册”。 – user733299 2011-05-01 13:46:16

+1

@ user733299 - stacker回答了您的问题,请接受它,正如您所说的那样解决了问题。如果您有其他问题,欢迎您将其作为单独问题发布。请尝试下次更多地设置代码的格式,以便那些试图帮助您的人的眼睛不会弹出:) – MByD 2011-05-01 16:11:38

+0

@ user733299要调试代码,您应该使用单步设置断点或跟踪执行,并观察变量。如果您不使用IDE,则至少可以添加一些System.out.println来查看哪些变量为空。 – stacker 2011-05-02 04:52:14