2013-06-13 2 views
0

Вот некоторые из моего кода:Создания нового объекта Изменение переменного экземпляра предыдущего объекта

  PlayerInfo P1 = new PlayerInfo(); 
      P1.setInfo(1); 
      System.out.println("" + P1.X + "," + P1.Y); 
      PlayerInfo P2 = new PlayerInfo(); 
      P2.setInfo(2); 
      System.out.println("" + P1.X + "," + P1.Y); 
      PlayerInfo P3 = new PlayerInfo(); 
      P3.setInfo(3); 
      System.out.println("" + P1.X + "," + P1.Y); 
      PlayerInfo P4 = new PlayerInfo(); 
      P4.setInfo(4); 
      System.out.println("" + P1.X + "," + P1.Y); 

игрока информация определяются как:

public class PlayerInfo{ 
public static int Range; 
public static int X; 
public static int Y; 
public static int Score; 
public static int Lives; 
private static ImageIcon image; 
public PlayerInfo(int Num){ 
    Range = 1; 
     if(Num == 1){ 
      this.X = 0; 
      this.Y = 0; 
      //System.out.println("" + X + "," + Y); 
      image = new ImageIcon("H:\\My Pictures\\BomberMan\\BMBlack.png"); 
     } 
     else if(Num == 2){ 
      this.X = 16; 
      this.Y = 0; 
      //System.out.println("" + X + "," + Y); 
      image = new ImageIcon("H:\\My Pictures\\BomberMan\\BMWhite.png"); 
     } 
     else if(Num == 3){ 
      this.X = 0; 
      this.Y = 16; 
      //System.out.println("" + X + "," + Y); 
      image = new ImageIcon("H:\\My Pictures\\BomberMan\\BMRed.png"); 
     } 
     else if(Num == 4){ 
      this.X = 16; 
      this.Y = 16; 
      //System.out.println("" + X + "," + Y); 
      image = new ImageIcon("H:\\My Pictures\\BomberMan\\BMBlue.png"); 
     } 
    Score = 0; 
    Lives = 3; 
} 

Прямо сейчас мой код отображается:

0,0

16,0

0,16

16,16

когда следует отображать:

0,0

0,0

0,0

0,0

потому что P1.X и P1.Y инициализированы как 0 и 0 и не должны меняться в моем коде. Я понятия не имею, почему он меняет значения P1.X и P1.Y, когда я их вообще не трогаю. Может кто-нибудь, пожалуйста, объясните мне это? Примечание. Я попытался создать отдельный метод для установки информации и массива PlayerInfo, но ничего не работает. Заранее спасибо.

ответ

0

Во всех статьях if класса PlayerInfo вы назначаете значения X и Y. Например:

this.X = 0; 
this.Y = 0; 

Вот причина, почему значения меняются, потому что X и Y переменные static. Удалите static для обеих переменных в PlayerInfo, после чего вы получите нужное поведение.

static переменные разделяются между разными объектами класса. Поэтому, если вы назначили P1.X = 10, тогда P2.X, P3.X, P4.X и т. Д. Также станет 10, поскольку одна и та же переменная разделяется всем объектом.

Смежные вопросы