我正在尝试编写一个toString()方法,该方法将表示迷宫的2d Char数组转换为字符串表示形式。
public String toString(){
String s = "";
for(int i = 0; i < map.length;i++){
s += Arrays.toString(map[i]);
}
return s;
}
public static void main(String[] args){
Maze maze = new Maze();
String filename = args[0];
maze.initializeFromFile(filename);
String path = maze.findPath();
map[startRow][startCol] = 'S';
System.out.println(map.toString());
System.out.println(path);
}
但这给了我这样的输出。我在这里读到这是指针地址或与内存位置有关,但我不知道该如何处理。当我在Main中使用一个简单的循环来打印每一行时,我可以得到我想要的输出,但每当我尝试使用这种方法时,我总是得到这种输出。
[[C@5c647e05
这是我从文本文件中获得的迷宫。
10 10
##########
# #
# ### #
# # G #
# # #
# #
# #
# #######
# S #
##########
这是我初始化char数组的方法
public class Maze {
public static char[][] map;
public static int startRow;
public static int startCol;
public static int mapHeight;
public static int mapWidth;
public void initializeFromFile(String filename){
try {
Scanner scanner = new Scanner(new File(filename));
mapHeight = scanner.nextInt();
mapWidth = scanner.nextInt();
scanner.nextLine();
map = new char[mapHeight][mapWidth];
for(int i = 0; i < map.length;i++){
String line = scanner.nextLine();
map[i] = line.toCharArray();
for(int j = 0; j < map[i].length;j++){
if(map[i][j] == 'S'){
startRow = i;
startCol = j;
}
}
}
scanner.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:0)
如果使用toString打印java数组,则只打印数组的id。如果你使用的Arrays.toString(map)
会更像你想要的那样。
听起来在这种情况下你实际上需要Arrays.deepToString(map)
,因为你有嵌套数组。
http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#deepToString(java.lang.Object[])
答案 1 :(得分:0)
您可以使用Arrays.deepToString(2dArray)
,但打印输出将是单行输出。
如果您希望打印输出为2D(表格形式),您可以考虑覆盖Maze类的toString方法(因为您无法覆盖2D数组 - 地图)。
class Maze(){
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
for(int x=0; x<map.length; x++){
for(int y=0; y<map[0].length; y++)
sb.append(map[x][y]);
sb.append("\n");
}
return sb.toString();
}
}
打印地图:
而不是System.out.println(map.toString());
,只需打印由maze
支持的map
。
System.out.println(maze);