2011-12-27 5 views
1

私は3つの異なるクラスを持っていますが、すべて1つのクラスのインスタンスを使用する必要があります。その1つのクラスは、player1、player2などの複数のインスタンスを独自に作成することもできますし、staticは古い名前を上書きするため、静的に動作しません。異なるクラスのオブジェクトのJavaリフレッシュインスタンス

私は最後のクラスで "new"キーワードを使用すべきではないことを知っていますが、それ以外の方法はわかりません。

public class Test{ 
    public static void main(String[] args){ 
     Player player1 = new Player("bob"); 
     Player player2 = new Player("Hank"); 
     System.out.println("Original Name: " + player1.getName()); 
     System.out.println("Original Name 2: " + player2.getName()); 
     Display dis = new Display(); 
     dis.disp(); 

     System.out.println("Changed Name: " + player1.getName()); 
     System.out.println("Changed Name 2: " + player2.getName()); 
    } 
} 

class Player{ 
    private String pName = ""; 
    public Player(){} 
    public Player(String name){ 
     pName = name; 
    } 

    public void setName(String inName){ 
     pName = inName; 
    } 

    public String getName(){ 
     return pName; 
    } 
} 

class Display{ 
    public void disp(){ 
     Player player1 = new Player(), player2 = new Player(); //Unneeded 
     System.out.println("Player name: " + player1.getName()); 
     System.out.println("Player name 2: " + player2.getName()); 

     player1.setName("Joe?"); 
     player2.setName("Billy?"); 

     System.out.println("Player new name: " + player1.getName()); 
     System.out.println("Player new name 2: " + player2.getName()); 
    } 
} 
+0

あなたは正確に何をしようとしていますか? – Bhushan

+0

プレイヤーの名前を変更して静的にしておきますが、静的を使用すると、player2はplayer1を上書きします.. – user1062898

+0

このようなステートメント 'new player()、player2 = new Player();'で正確に何をしますか? – Lion

答えて

4

あなたがDisplayにあなたがTestで作成しPlayerの同じインスタンスを変更しようとしているようです。それはケースが実際にある場合は、disp()にこれらのオブジェクトを渡す必要があります:メソッドを呼び出す

public void disp(Player player1, Player player2){ 
    System.out.println("Player name: " + player1.getName()); 
    System.out.println("Player name 2: " + player2.getName()); 

    player1.setName("Joe?"); 
    player2.setName("Billy?"); 

    System.out.println("Player new name: " + player1.getName()); 
    System.out.println("Player new name 2: " + player2.getName()); 
} 

次のようになります。dis.disp(player1,player2);

私はここでいくつかのコードの臭いがあることを示す必要がありますが、それはのように思えますそれがそうであれば、この段階でそれについてあまり心配するべきではありません。

+1

ああ、私はそれを考えなかったとは思えません。それはまさに私が必要なものでした。 – user1062898

+1

@ user1062898:amitの投稿があなたを助けてくれたら、(私が行ったように)投票してください。それがあなたの問題を解決するなら、答えの左側のチェックマークをクリックしてそれを "受け入れ"ます。 –

+1

6分を待たなければならない/アップホートに15の評判を持たない – user1062898

4

Displayクラスには、必要に応じて名前を変更するなど、必要に応じて外部クラスがプレイヤーと対話できるようにする2つのプライベートPlayerフィールドとパブリックメソッドを与えます。クラスsetPlayer1(Player p)setPlayer2(Player p)のメソッドを与えたり、クラスがコンストラクターパラメーターを介して2つのプレーヤーを受け入れるようにすることができます。

非常にの理由がない限り、静的変数の使用は避けてください。

0

さて、なぜあなたは、クラスにしない:

class Display{ 
    public static void disp(Player player, String newName){ 
     System.out.println("Player name: " + player.getName()); 

     player.setName(newName); 

     System.out.println("Player new name: " + player.getName()); 
    } 
} 

をして呼び出し:テストクラスで

Display.disp(player1, "Joe?"); 
Display.disp(player2, "Hank?"); 

ので、基本的には、単に表示の静的メソッドを作りますパラメータとして適切なフィールドを入力します。

関連する問題