java - 使用 toString() 打印包含多个对象的 map

标签 java tostring

我正在用java制作一个没有界面的pacman模拟器,仅使用控制台打印,并且在打印时遇到了问题。 所以,我有一个 pacman 对象,它有坐标 x 和 y,我有一个带有墙壁和 fruti 的网格,它是矩阵tile[][]。 虽然我只打印 pacman 和网格,但一切都很好。 这是我使用的 toString():

public String toString() {
        String s = "";
        for(int i=0;i<WIDTH;i++) {
            for(int j=0;j<HEIGHT;j++) {
                if(pacman.getX() == i && pacman.getY() == j) {
                    s = s + pacman;
                } 
                else {  
                    s = s+tile[i][j];   
                }


            }
            s=s+"\n";
        }
        return s;
    }

这是输出:

####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################

现在,我创建了一个幽灵数组列表,当我想打印幽灵、吃 bean 人和网格时遇到了一些问题。 我希望代表幽灵的角色位于网格角色之上,就像我对吃 bean 人所做的那样。 我只是想不出在瓷砖上方打印鬼魂的最佳方法。 我正在使用这样的 foreach 循环:

for(Ghost g : ghosts) {
  if(g.getX() == i && g.getY() == j) {
        s = s + g;
  }
}

通常我在控制台中得到这样的打印:

####################
#<~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~3~~~~~2~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~1~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
#~~~~~~~~~~~~~~~~~~#
####################

我该如何解决这个问题?

最佳答案

你需要以某种方式去掉“~”。您可以通过使用二维字符数组而不是字符串来完成此操作,如下所示:

char[][] map = new char[width][height];

然后你可以像这样编辑每个“像素”:

map[y][x] = g;

编辑:然后,您可以通过循环遍历所有字符,将它们写入字符串并在每行后面放置\n 来绘制屏幕。

关于java - 使用 toString() 打印包含多个对象的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53619798/

相关文章:

java - JCombo + 覆盖 toString

Java - KeyListener 事件未触发

java - 队列不适用于线程?

java - 如何使用 ControlsFX 实现 AutoComplete TextField

Java:如何使用 ArrayList 在寄存器中使用计数器

java - 第二次单击鼠标后,JTree 节点会更改其表示形式

java - 重写 toString() 以表示对象的字符串的原因和好处是什么?

java - 如何打印我的 Java 对象而不得到 "SomeType@2f92e0f4"?

java - 如何在 Java 中使用 toString 方法将 int 数组转换为 String

java - 创建 JFrame 时是否调用了 paint() 方法?