Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自单独对象的数组未正确打印_Java_Arrays_String_Object_Int - Fatal编程技术网

Java 来自单独对象的数组未正确打印

Java 来自单独对象的数组未正确打印,java,arrays,string,object,int,Java,Arrays,String,Object,Int,我有一个程序,目前我正在尝试创建一个具有可自定义整数的播放器。我使用这个对象: 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 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的第一部分)

在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

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

例如,添加如下内容:

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

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

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

如果在系统中插入对象,将自动调用此方法。outprintln()

谢谢你,你能对字符串播放器做同样的事情吗?你提到的setter,但是我看到一个覆盖,一个只接受def值的构造函数,还有一个getter…这会不会导致Player.getPlayer()上出现“无法对非静态方法进行静态引用”?@BenKnoble啊,一个小错误。我不是说二传手,我是说二传手。不喜欢setter。@Daniel是的,会的,因为该方法不是静态的。不要这样做,而是在播放器< /Cord>对象上调用方法,就像我的例子中那样。仅仅为了更强的打字,你可以考虑在自己的类中包装(强度、防御、魔法等)(与我的问题的最大点是java没有结构)。它可以处理错误的数据值,并且更强烈地要求程序员将强度、魔法和防御实例传递给构造函数