Java - 通过文本 UI 将人员添加到链接列表

标签 java user-interface text linked-list

当尝试添加人员时,它只是在 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 && 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;
    }

我在文本 UI 中添加 1 个人后,没有任何人注册。

最佳答案

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

private PersonList personList = new PersonList();

关于Java - 通过文本 UI 将人员添加到链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848631/

相关文章:

python - 如何基于Python生成不同格式(HTML、文本等)的报告?

java - 如何在一个 Eclipse 项目中为另一个 Eclipse 项目中的类编写测试?

java - 无法将 csv 文件从一个目录移动到另一目录

c++ -::MoveWindow 的问题 - 留下空白

c++ - 我应该买哪种书来学习如何在Visual Studio 2010中开发c++应用程序。

css - CSS中不同颜色的 block 边框+文本边框

javascript - Firefox 上渲染不佳/抗锯齿的 Canvas 文本

java - 不同线程释放的可重入ReadWriteLock

java - Maven POM 困惑

用于在 Windows 中自动执行桌面事件的 Python 代码