2015-10-18 55 views
-1

我想写一个toString()方法将一个代表迷宫的2d Char数组转换为字符串表示形式。toString()方法,返回一个迷宫的字符串表示形式

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中使用一个简单的循环来打印每一行时,我可以得到我想要的输出,但每当我尝试使用这种方法时,我总是会得到这种输出。

[[[email protected] 

这是我从一个文本文件给出的迷宫。

10 10 
########## 
#  # 
# ### # 
# # G # 
# # # 
#  # 
#  # 
# ####### 
# S # 
########## 

这是我我的初始化字符数组

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(); 
    } 
} 
+1

通常'toString'方法假设返回简单的一行字符串,其中包含关于对象的信息,这些信息可以很容易地包含在日志文件中。如果您的方法需要生成多行响应,那么可能会创建单独的方法,如'void printMaze()'而不是'toString()'。你也不应该在'try'块中关闭你的资源,因为如果在这行之前会发生什么坏事,你永远不会调用'close()'方法。将它移到'finally'块,或者更好地开始使用try-with-resources。 – Pshemo

回答

0

您可以使用Arrays.deepToString(2dArray),但打印出来将是一个内衬输出。

如果你想打印出来是二维的(表格),你可以考虑重写你的迷宫类的toString方法(因为你不能覆盖你的二维数组映射)。

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());,只是打印这是由map支持的maze

System.out.println(maze); 
+0

**备注:**如果我是你,我会用'print()'或'printMap()'等自定义方法实现地图的打印,而不是在'toString()'中执行。 – user3437460