我正在创建一个5x5电路板,其中各种字符存储在不同的位置,表示它是空的,显示“ - ”,并根据字符显示另一个符号%,&等
我能够将角色分配给位置,但是当涉及到显示棋盘时,使用getSymbol()
方法将toString()方法打印出来并根据需要与符号相对应。
字符存储在characters
数组中,电路板保存在2D数组multD
中。
Character
是父类,子类是Dog
,cat
等。
主要方法
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
父类
public String toString() {
String st = "Entity Properties \n";
st = st + " TYPE: " + getType() ;
return st;
}
现在Dog存储在[2] [2]中,如何只打印该角色的符号?最终角色会移动。
感谢任何帮助或建议!
答案 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()
。您可能想要做的是,而不是:
首先,重构您的计划,将multD
从Object[][]
更改为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
)。
您可能还想让角色成为interface或abstract 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();
}