【问题标题】:Java - adding person to a linked list via text UIJava - 通过文本 UI 将人员添加到链接列表
【发布时间】:2011-05-01 13:23:30
【问题描述】:

当试图添加一个人时,它只是在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 个人后,它不会给任何人注册。

【问题讨论】:

    标签: java user-interface text linked-list


    【解决方案1】:

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

    private PersonList personList = new PersonList();
    

    【讨论】:

    • 谢谢!没有更多的空指针。但是现在当我尝试使用上面添加的 toString 方法打印它时,我只会得到“没有人注册”
    • @user733299 - stacker 回答了您的问题,请接受它,因为您说它解决了问题。如果您还有其他问题,欢迎您将其作为单独的问题发布。下次请尝试格式化您的代码,这样那些试图帮助您的人的眼睛就不会跳出来:)
    • @user733299 要调试您的代码,您应该设置断点或使用单步跟踪执行并观察您的变量。如果您不使用 IDE,您至少可以添加一些 System.out.println 来查看哪些变量为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2012-01-25
    • 2020-11-16
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多