【问题标题】:Array from a seperate object not printing correctly来自单独对象的数组未正确打印
【发布时间】:2015-05-25 23:08:33
【问题描述】:

我有一个程序,目前我正在尝试创建一个具有可自定义整数的播放器。我使用这个对象:

public class Player {

   public String player = null; 
   private int Strength=0; 
   private int Defense=0;
   private int Magic=0;
   private int Resistance=0;
   private int Skill=0;
   private int Luck=0;

   public Player(String name, int int1, int int2, int int3, int int4, int int5, int int6) {
       this.player = name;
       this.Strength = int1;
       this.Defense = int2;
       this.Magic = int3;
       this.Resistance = int4;
       this.Skill = int5;
       this.Luck = int6;
   }
}

我使用这个主类来运行它,并设置整数和字符串值。

public class Main {
public static void main(String[] args) {


Player[] playerList = new Player[] {new Player("Player1", 3, 3, 2, 1, 1, 3),new Player("Player2", 1, 1, 1, 1, 1, 1)};



}

}

但是,每当我尝试打印时,它都会打印:Player@659e0bfd 我查看了类似的问题,但我不确定在我的程序中将@Override 放在哪里,以及是否需要做一些不同的事情,因为我有多个整数和一个字符串。我只希望字符串打印出来。 (另外,有没有办法只打印出playerList的一部分,即第一部分“Player1”)

【问题讨论】:

  • 为了更强的打字,你可以考虑将整数(力量、防御、魔法等)包装在他们自己的类中(我最大的问题是java没有结构)可以处理错误的数据值,并且更强烈地要求程序员将强度、魔法、防御实例传递给构造函数

标签: java arrays string object int


【解决方案1】:

您需要在 Player 类中放置覆盖。

有点像:

public class Player {
    // fields here

    @Override
    public String toString() {
        return Strength + " " + Defense; // plus all the fields here
    }
}

关于您的其他问题:是的,您可以,但是由于所有字段都是私有的,因此您需要为这些字段创建 getter。然后你可以这样做:

public class Player {
    private int defense;
    private String name;

    public Player(int defense, String name) {
         this.defense = defense;
         this.name = name;
    }

    public int getDefense() {
         return this.defense;
    }

    public String getName() {
         return this.name;
    }
}

Player player = new Player(9000);
System.out.println(player.getName + " has defense + " player.getDefense());

此外,坚持 Java 约定也是一个好主意。这意味着变量用小写字母书写,例如 strength 而不是 Strength

【讨论】:

  • 谢谢,能不能为弦乐播放器做同样的事情
  • 你提到了setter,但我看到了一个覆盖,一个只接受def值的构造函数和一个getter......
  • 这会导致 Player.getPlayer() 上出现“无法对非静态方法进行静态引用”吗?
  • @BenKnoble 啊,一个小错字。我不是说二传手,我不是说吸气剂。不喜欢二传手。
  • @Daniel 是的,它会的,因为该方法不是静态的。不要那样做,而是调用 player 对象上的方法,就像在我的示例中一样。
【解决方案2】:

您看到的是 Object 类中 toString 方法的输出,您的 Player 类隐式扩展了该方法。如果您希望它输出其他内容,则必须覆盖 Player 类中的 toString() 方法。

例如,添加如下内容:

@Override
public String toString() {
  return "Player(Strength: " + Strength + ", Defense: " + Defense + ")";
}

【讨论】:

    【解决方案3】:

    所以基本上我假设你使用System.out.println(); 方法来显示你的对象,对吗?您定义了自己的类和对象。你必须定义你自己的打印方法,你必须覆盖它。方法被调用

    @Override 
    public String toString(){ return this.Strength + " " + this....);
    

    如果您在 System.outprintln() 中插入对象,此方法将被自动调用;

    【讨论】:

      猜你喜欢
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多