来自单独对象的数组无法正确打印
Array from a seperate object not printing correctly
我有一个程序,目前正在尝试创建一个具有可自定义整数的播放器。我使用这个对象:
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;
}
}
我用这个主要class到运行它,并设置整数和字符串值。
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)};
}
}
但是,每当我尝试打印它时,它都会打印 this:Player@659e0bfd
我查看了类似的问题,但我不确定将@Override 放在我的程序中的什么位置,以及是否需要做一些不同的事情,因为我有多个整数和一个字符串。我只想打印出字符串。 (另外,有没有办法只打印出玩家列表的一部分,即第一部分"Player1")
在播放器中 class 您需要设置覆盖。
有点像:
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
.
您看到的是对象 class 中 toString 方法的输出,您的播放器 class 隐式扩展了该方法。如果您希望它输出其他内容,则必须重写 Player class 中的 toString() 方法。
例如,添加如下内容:
@Override
public String toString() {
return "Player(Strength: " + Strength + ", Defense: " + Defense + ")";
}
所以基本上我假设你使用 System.out.println();
方法来显示你的对象对吗?您定义了自己的 class 和对象。您必须定义自己的打印方法,您必须覆盖它。该方法被称为
@Override
public String toString(){ return this.Strength + " " + this....);
如果您在 System.outprintln();
中插入对象,将自动调用此方法
我有一个程序,目前正在尝试创建一个具有可自定义整数的播放器。我使用这个对象:
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;
}
}
我用这个主要class到运行它,并设置整数和字符串值。
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)};
}
}
但是,每当我尝试打印它时,它都会打印 this:Player@659e0bfd 我查看了类似的问题,但我不确定将@Override 放在我的程序中的什么位置,以及是否需要做一些不同的事情,因为我有多个整数和一个字符串。我只想打印出字符串。 (另外,有没有办法只打印出玩家列表的一部分,即第一部分"Player1")
在播放器中 class 您需要设置覆盖。
有点像:
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
.
您看到的是对象 class 中 toString 方法的输出,您的播放器 class 隐式扩展了该方法。如果您希望它输出其他内容,则必须重写 Player class 中的 toString() 方法。
例如,添加如下内容:
@Override
public String toString() {
return "Player(Strength: " + Strength + ", Defense: " + Defense + ")";
}
所以基本上我假设你使用 System.out.println();
方法来显示你的对象对吗?您定义了自己的 class 和对象。您必须定义自己的打印方法,您必须覆盖它。该方法被称为
@Override
public String toString(){ return this.Strength + " " + this....);
如果您在 System.outprintln();
中插入对象,将自动调用此方法