2014-07-04 72 views
0

我是Java新手。请帮我理解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包含什么以及它会做什么。为什么在方法“pop”,“push”和“print”中始终使用HeadStack关键字?

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(); 
     } 
    } 
} 
+0

顺便说一句'String _name'是一个对象的引用,就像'next next'一样。 –

+0

请注意java类名的推荐命名约定是:“类名应该是名词,大小写混合,每个内部单词的第一个字母大写。”请参见[Java TM编程语言的代码约定](http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html)。所以在你的情况下'推荐公共类Person {'。 – DavidPostill

回答

1

认为它是在链private person next的链接提供了在此链或null链接到“下一个” person对象,如果它不存在。

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

为什么总是在方法中使用这种磁头组关键词“流行”,“推”,“打印”

对象表示在第一个链接链

+0

还是不明白,为什么在(私人下一个)人可以变量。像int来包含数字。 – Okem

+0

为什么不呢? 'person'只是一种对象,它不是一个实例,所以声明就像'{modifier} {type} {name}',它表示'next'是一种'person',并且是'private '到'人'类 – MadProgrammer