为什么在通过2D阵列打印时显示整个对象属性

时间:2015-04-15 16:04:06

标签: java arrays

我正在创建一个5x5电路板,其中各种字符存储在不同的位置,表示它是空的,显示“ - ”,并根据字符显示另一个符号%,&等

我能够将角色分配给位置,但是当涉及到显示棋盘时,使用getSymbol()方法将toString()方法打印出来并根据需要与符号相对应。

字符存储在characters数组中,电路板保存在2D数组multD中。 Character是父类,子类是Dogcat等。

主要方法

Object [][] multD = new Object[5][5];
ArrayList<Character> characters = new ArrayList<Character>();

Character dog1 = new Dog();
dog1.setPosition(2, 2);
multD[dog1.getX()][dog1.getY()] = dog1;

for (int i = 0; i < 5; i++){
    for (int j = 0; j < 5; j++){
        if (multD[i][j] == null){
            multD[i][j] = '-';
        }else  {
            multD[i][j]=("@@");  //test
          //multD[i][j] = multD[i][j].getSymbol();<- something I assumed like this but I don't know the code
        }
    }
}
for(int i=0; i<5; i++) {
    for(int j=0; j<5; j++)
        System.out.print(multD[i][j]+" ");
        System.out.println();
}

Dog Subclass(将添加更多属性)

public class Dog extends Character{
private int x, y;

    public Dog(){
        setType("Dog");
        setSymbol('%');
    }
    @Override
    public int getX(){
        return x;
    }
    @Override
    public int getY(){
        return y;
    }
    @Override
    public void setPosition(int x, int y){
        this.x = x;
        this.y = y;
    }

}

Character父类

中的toString方法
   public String toString() {      
       String st = "Entity Properties \n";
       st = st + "  TYPE:  " + getType() ;
       return st;
   }

现在Dog存储在[2] [2]中,如何只打印该角色的符号?最终角色会移动。

感谢任何帮助或建议!

4 个答案:

答案 0 :(得分:1)

这一行:

Object [][] multD = new Object[5][5];

需要修改为

Character [][] multD = new Character[5][5];

如果您想在getSymbol()上致电multD

答案 1 :(得分:0)

你的错误来自这条线:

System.out.print(multD[i][j]+" ");

这是因为您将String连接到Object,因此JVM会在对象上调用.toString()。您可能想要做的是,而不是:

首先,重构您的计划,将multDObject[][]更改为Character[][]。然后,将上面的行更改为:

System.out.print(multD[i][j].getSymbol()+" ");

请注意,您还需要添加null - 检查,否则会抛出NullPointerException。这可能看起来像这样:

System.out.print((multD[i][j] == null ? "-" : multD[i][j].getSymbol())+" ");

condition ? expression : expression语法称为'三元运算符'。有关它的信息可以找到here。)

假设您希望将null转换为-

我还建议定义一个默认类型来填充数组(例如Empty extends Character)。

您可能还想让角色成为interfaceabstract class,因为您似乎没有实例化普通Character,只是它的子类。不过,这需要更多的工作,而且你的方法也适用。

答案 2 :(得分:0)

您必须在getSymbol()类上实施Character方法,并将该符号存储在Character类中。

然后,您可以调用multD[i][j].getSymbol()之类的数组元素,也可以在toString()类上实现Character方法,该方法只返回对getSymbol的调用。然后,只需调用multD[i][k]即可返回符号。

答案 3 :(得分:0)

multD必须是Character的数组。对于空字段使用/ keep null。打印时,通过其吸气剂访问角色符号。

Character [][] multD = new Character[5][5];
ArrayList<Character> characters = new ArrayList<Character>();

Character dog1 = new Dog();
dog1.setPosition(2, 2);
multD[dog1.getX()][dog1.getY()] = dog1;


for(int i=0; i<5; i++) {
    for(int j=0; j<5; j++) {
        if (multD[i][j] == null) {
            System.out.print("- ");
        } else {
            System.out.print(multD[i][j].getSymbol() + " ");
        }
    }
    System.out.println();
}