2

次のコードがあります。

public static void main(String[] args) {
  Player players[] = new Player[2];
  Scanner kb = new Scanner(System.in);
  System.out.println("Enter Player 1's name");
  players[0] = new Player(kb.nextLine());
  System.out.println("Enter Player 2's name");
  players[1] = new Player(kb.nextLine());
  System.out.println("Welcome "+ players[0].getName() + " and " + players[1].getName());    
}

これは、配列内のすべてのオブジェクトを保持しながら、新しいプレーヤー オブジェクトを作成し、プレーヤーの名前を格納するためのものです。

プレイヤークラスは次のとおりです。

public class Player {
  static String name;
  public Player(String playerName) {
    name = playerName;
  }

  public String getName(){
    return name;
  } 
}

実際に何が起こるかというと、オブジェクトが 1 つだけの場合は機能しますが、2 つある場合は配列内の各要素が 2 番目の要素と同じになります。配列に 3 つのオブジェクトがある場合、各要素は 3 番目などと同じです。

なぜこれが起こっているのか、またはそれを修正する方法がわかりません。何時間も私を困惑させてきました:/

4

4 に答える 4

9

その静的フィールドのため。統計は、オブジェクトインスタンス全体で使用されます。それらはクラスレベルで保存されます。

以下のコードは機能します:

class Player
{
    String name;

    public Player(String playerName)
    {
        name = playerName;
    }

    public String getName()
    {
        return name;
    }
}
于 2013-02-15T18:18:37.247 に答える
4

静的文字列名をプライベート文字列名に変更します

于 2013-02-15T18:19:03.743 に答える
3

名前フィールドは静的であってはなりません。静的とは、変数が実際にグローバルであり、すべてのクラスインスタンス間で共有されることを意味します。

于 2013-02-15T18:18:56.850 に答える
0

キーワードstaticを使用して、インスタンス変数ではないnameクラス変数を作成しました。クラス変数はすべてのオブジェクトに共通です。続きを読むにはクリックしてください

于 2013-02-15T18:55:47.207 に答える