Java Stack卡住了

时间:2014-07-04 06:40:39

标签: java data-structures stack

我是Java的新手。请帮我理解Java。

我无法理解我的老师关于“堆栈”的代码。

以下代码适用于我的班级Person。我的问题是private Person next;是什么意思?为什么这个变量有类名?这堂课在做什么?

public class Person {
    private String _name, _address;
    private int _id;
    private Person next; // what is this mean and do 

    public Person(String a, String b, int c){
        this._name = a;
        this._address = b;
        this._id = c;
    }
    public Person(){

    }

    public String getname(){
        return this._name;
    }

    public String getaddress(){
        return this._address;
    }

    public int getid(){
        return this._id;
    }

    public person getnext(){
        return this.next;
    }

    public void setname(String a){
        this._name = a;
    }

    public void setaddress(String a){
        this._address = a;
    }

    public void setid(int a){
        this._id = a;
    }

    public void setnext(person a){
        this.next = a;
    }

    @Override
    public String toString(){
        return "Person{"+ "Name = " + _name +", Address" + _address +", Id = " + _id +'}';
    }
}

这是我的主类代码。在这个主要课程中,我无法理解private static Person HeadStack包含什么以及它将做什么。为什么HeadStack关键字总是在方法“pop”,“push”和“print”中使用?

public class mainmahasisswa {


    private static  Person HeadStack; // what is this mean & do 

    public static void main(String[] args) {
        push();
        push();
        push();
        print();
        pop();
        print();
        pop();
        print();
        push();
        print();
    }

        private static  Person setdata(){
        person pr = new person();
        String name, address;
        int id;

        name = JOptionPane.showInputDialog("Name : ");
        address = JOptionPane.showInputDialog("Address : ");
        id = Integer.parseInt(JOptionPane.showInputDialog("id : "));

        pr.setname(name);
        pr.setaddress(address);
        pr.setid(id);
        pr.setnext(null);

        return pr;
    }

    private static void pop(){
            if (HeadStack != null){
                person aa ;
                aa = HeadStack.getnext();
                HeadStack = aa;
            }
            else{

                System.out.println();
            }
        }

    private static void push(){
        person x = setdata();         
        if(HeadStack != null){
            x.setnext(HeadStack);  
            HeadStack = x;
        }
        else{
            HeadStack = x;
        }
    }

    private static void print(){
        if(HeadStack != null ){
            person y = HeadStack;
            while(y != null){
                System.out.println(y.toString());

                y = y.getnext();
            }
            System.out.println();
        }
        else{
            System.out.println();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

将其视为链中的链接private person next提供指向此链中“下一个”person对象的链接,如果不存在则提供null

private person next; // what is this mean and do 

这是一个声明,其中的下一个是person类型,最初被分配null

此...

private static  person HeadStack; // what is this mean & do 

只是一个声明,表示HeadStackperson的类型static,这意味着它不依赖于要访问的任何类的特定实例。

查看Language Basics: VariablesUnderstanding Class Members

  

为什么这个HeadStack关键字总是在方法“pop”,“push”,“print”

中使用

该对象代表链中的第一个链接