2011-05-18 17 views
0

私はクラスに問題があります。私は自分のクラスを「人」と呼んでいました。パラメータ "name"と "age"をとります。他のクラスでは私はPerson []を作りたいです。どちらが機能するのか、主な問題は、配列は入力した最後のエントリのみを保存することです。どうすれば修正できますか?Javaクラスの問題

注:これは宿題ではありません。私は自分のプロジェクトに取り組んでいます。

コード:

 public class Person { 

     private static String name; 
     private static int age; 

     public Person(){ 
      Person.name = "NAME"; 
      Person.age = 0; 
     }  

     public Diver(String name,int age){ 
      Person.name = name; 
      Person.age = age; 

     } 

     public static String getName(){ 
      return Person.name; 
     } 

     public static int getScore(){ 
      return Person.age; 
     } 

     public static String printString(){ 

      return Person.name + " " + Person.age; 
     } 


    } 

    public class TESTER { 
    public static void main(String[]args){ 
     Person[] persons = new Person[4]; 
     persons[0] = new Person("bob2",15); 
     persons[1] = new Person("bob1",15); 
     persons[2] = new Person("bob",16); 

     for(int i = 0;i<persons.length;i++){ 
      System.out.println(persons[i].printString()); 
     } 

    } 

} 

答えて

10

名前と年齢静的をしないでください。また、すべてのメソッドを静的にしないでください。

静的変数は、クラス固有のものです。インスタンス変数は、そのクラスの各オブジェクトに固有です。

そして、クラス内で、代わりにPerson.nameとして変数を参照することで、name

+1

アーメン!そして、これが問題である理由は、変数を静的にすることで、オブジェクトではなくクラスの変数にして、すべてのオブジェクトが同じ名前と年齢の変数を共有することになります。したがって、あなたはすべてのためにそれを変更します。 –

+1

静的変数を使用する必要がある状況がいくつかあります。この場合の例は、そこにいる人の数を把握したい場合です。しかし、ほとんどのものは一般的に静的ではありません(私の経験では) – matzahboy

4

静的変数は、クラス全体であるとして、それを参照してください、これは人のすべてのインスタンスが同じ静的変数を共有することを意味します。あなたが持っているときに、オブジェクト

0
public class Person { 

private String name; 
private int age; 

public Person(){ 
    name = "NAME"; 
    age = 0; 
}  

public Person(String name,int age){ 
    this.name = name; 
    this.age = age; 

} 

public String getName(){ 
    return name; 
} 

public int getScore(){ 
    return age; 
} 

public String printString(){ 

    return name + " " + age; 
} 

} 

、静的VARSとメソッドを使用していない:

class aClass { 
    private static String name; 
} 

EVERYインスタンスを(新しいで作られ得るもの)の作成されたそのクラスは、SAMEの 'name'変数を共有します。 あなたがこれを行う...

class aClass { 
    private String name ; 
} 

各インスタンスは、独自の個別の名前を持っています。

+0

-1 __why__を説明しないために 'static'は動作しません – Pops

0

のためにそれらを使用しているとき

0

静的に名前と年齢を設定しないでください。

フィールドが静的な場合は、このクラスのインスタンスではなく、クラス自体が所有することを意味します。つまり、すべてのアプリケーションに1つの変数の名前がであり、すべてのPersonのインスタンスがそれを共有します。 名前と年齢を変更すると、すべてのクラスが変更され、最後に使用されたクラスがすべて変更されます。

0

主な問題は、入力した最後のエントリだけがアレイに保存されることです。どうすれば修正できますか?

これの背後にある問題は、静的変数を使用していることです。代わりに、インスタンス変数にする必要があります。彼らは静的なので、毎回上書きされている1つのコピーがあり、最終的にnameageの最後のペアが得られます。

インスタンス変数を作成すると、問題が解決するはずです。