Java-ajout d'une personne à une liste chaînée via une interface utilisateur textuelle


Lorsque vous essayez d'ajouter une personne, il indique simplement une erreur de pointeur null à personList.AddPersonSort. S'il vous plaît aider.

    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;
    }

Il ne donne aucune personne enregistrée après avoir ajouté 1 personne dans l'interface utilisateur textuelle.

Author: jonmorgan, 2011-05-01

1 answers

Dans Menutext, vous devez initialiser votre personList avant de l'utiliser.

private PersonList personList = new PersonList();
 2
Author: stacker, 2011-05-01 13:28:39