2012-10-27 28 views
1

我需要用2D数组中的位置[0] [0]处的字符串值标记迷宫的开始。问题是每次读取新行时,位置[i] [0]处的值都会改变,我需要它始终是位置[0] [0]处的第一个值。没有空格或分隔符,因此我正在读取每行中每行的每个char值。从txt.file读入二维数组的数据值正在翻转

我不知道如何得到它只是看到在迷宫[0] [0]字符串是我想设置为1的字符串?

迷宫的布局使第一行有2个整数; 1st int =迷宫中的行数,2nd int =迷宫中的列数。开始始终为[0] [0],结束始终为[第1行] [col-1]。其余的行是迷宫。因此,在文本文件中的第2行=迷宫的第0行。

因此,我将该文件作为字符串值读取,然后将第一行字符串值解析为int,并使用这些值来定义我的二维整数数组。

然后我通读剩余的行,并将它们与第一个char值进行比较,该值始终等于构成路径的值(如果存在)。如果读取的符号= =,那么它被存储为1,否则它被存储为0.然后我要通过二维数组并开始比较不同的坐标以确定路径并将该信息存储在一个队列,然后一个堆栈。

我遇到的问题是,它对前3行起作用,但其余行的值会翻转。我附加了代码片段,它正在读取的.txt文件。我知道这是因为它将自己与每行的第一个元素进行比较,对于前3行,它是“。”然后为其余行添加“+”。

import java.io.*; 
import java.util.*; 

public class MazeArray { 
    String info; 
    String[] rowCol; 
    //private char [][] maze; 
    private int [][] maze; 
    private Scanner readFile; 
    private int path, cur, row, col; 

public MazeArray() 


{ 
    maze = new int[0][0]; 
} 

public int[][] readFile(String fileName) throws IOException 
{ 
    readFile = new Scanner(new File(fileName)); 

    info = readFile.nextLine(); 
    rowCol = info.split(" ",2); 
    row = Integer.parseInt(rowCol[0]); 
    col = Integer.parseInt(rowCol[1]); 
    maze = new int[row][col]; 
    System.out.println("# of rows: " + row + " # of col: " + col); 

    while (readFile.hasNextLine()) 
    { 
     //System.out.println(readFile.next()); 

     for (int i=0; i<row; i++) 
     { 
      String symbol = readFile.nextLine(); 

      for (int j=0; j<col; j++) 
      { 
       path = symbol.charAt(0); 
       //safe = symbol.charAt(maze[0][0]); 
       maze[i][j] = symbol.charAt(j); 
       if (maze[i][j] == path) 
       { 
        maze[i][j] = 1; 
       } 
       else 
       { 
        maze[i][j] = 0; 
       } 
       System.out.println("for loop Path coord = (" + i + " , " + j + ") Value at coord = " + maze[i][j]); 

      }//for j  
     }//for i 
    }// while 
    readFile.close(); 
    return maze; 
} 

txt.File的内容(迷宫)

7 12 
..+.+.++++++ 
.++...++...+ 
..++.....+.+ 
+.+..++.+..+ 
+...++....++ 
+.+++..++..+ 
++++++++++.. 

输出 - RIGHT

for loop Path coord = (0 , 0) Value at coord = 1 
for loop Path coord = (0 , 1) Value at coord = 1 
for loop Path coord = (0 , 2) Value at coord = 0 
for loop Path coord = (0 , 3) Value at coord = 1 
for loop Path coord = (0 , 4) Value at coord = 0 
for loop Path coord = (0 , 5) Value at coord = 1 
for loop Path coord = (0 , 6) Value at coord = 0 
for loop Path coord = (0 , 7) Value at coord = 0 
for loop Path coord = (0 , 8) Value at coord = 0 
for loop Path coord = (0 , 9) Value at coord = 0 
for loop Path coord = (0 , 10) Value at coord = 0 
for loop Path coord = (0 , 11) Value at coord = 0 
for loop Path coord = (1 , 0) Value at coord = 1 
for loop Path coord = (1 , 1) Value at coord = 0 
for loop Path coord = (1 , 2) Value at coord = 0 
for loop Path coord = (1 , 3) Value at coord = 1 
for loop Path coord = (1 , 4) Value at coord = 1 
for loop Path coord = (1 , 5) Value at coord = 1 
for loop Path coord = (1 , 6) Value at coord = 0 
for loop Path coord = (1 , 7) Value at coord = 0 
for loop Path coord = (1 , 8) Value at coord = 1 
for loop Path coord = (1 , 9) Value at coord = 1 
for loop Path coord = (1 , 10) Value at coord = 1 
for loop Path coord = (1 , 11) Value at coord = 0 
for loop Path coord = (2 , 0) Value at coord = 1 
for loop Path coord = (2 , 1) Value at coord = 1 
for loop Path coord = (2 , 2) Value at coord = 0 
for loop Path coord = (2 , 3) Value at coord = 0 
for loop Path coord = (2 , 4) Value at coord = 1 
for loop Path coord = (2 , 5) Value at coord = 1 
for loop Path coord = (2 , 6) Value at coord = 1 
for loop Path coord = (2 , 7) Value at coord = 1 
for loop Path coord = (2 , 8) Value at coord = 1 
for loop Path coord = (2 , 9) Value at coord = 0 
for loop Path coord = (2 , 10) Value at coord = 1 
for loop Path coord = (2 , 11) Value at coord = 0 

输出 - WRONG

for loop Path coord = (3 , 0) Value at coord = 1 //Value should = 0 because ="+" 
for loop Path coord = (3 , 1) Value at coord = 0 
+0

您可以发布您正在使用的文件的内容吗? – sunleo

+0

迷宫部分是文件的内容。 – handro

+0

我将其重命名为文件内容以使其更容易。感谢您的帮助。 – handro

回答

1

你的错误是内部for循环中:

path = symbol.charAt(0); // <-- this is erroneous 
maze[i][j] = symbol.charAt(j); 
if (maze[i][j] == path) { 
    maze[i][j] = 1; 
} else { 
    maze[i][j] = 0; 
} 

您正在改变path场的每一行。因此,对于前三行,您将路径设置为.,因为这是该行中的第一个字符。在第四行,第一个字符是+,所以结果出现翻转。

您需要决定如何确定路径字符,并且每个文件只做一次。如果你有信心,在整个迷宫中的第一个字符是路径符号,然后阅读一次,并将其存储:

public int[][] readFile(String fileName) throws IOException { 
    readFile = new Scanner(new File(fileName)); 

    info = readFile.nextLine(); 
    rowCol = info.split(" ", 2); 
    row = Integer.parseInt(rowCol[0]); 
    col = Integer.parseInt(rowCol[1]); 
    maze = new int[row][col]; 
    System.out.println("# of rows: " + row + " # of col: " + col); 

    int row = 0; 

    while (readFile.hasNextLine()) { 
    String symbol = readFile.nextLine(); 

    if (row == 0) { 
     path = symbol.charAt(0); 
    } 

    for (int j = 0; j < col; j++) { 
     maze[row][j] = symbol.charAt(j); 
     if (maze[row][j] == path) { 
     maze[row][j] = 1; 
     } else { 
     maze[row][j] = 0; 
     } 
     System.out.println("Path coord = (" + row + " , " + j 
      + ") Value at coord = " + maze[row][j]); 

    }// for j 

    row++; 

    }// while 
    readFile.close(); 
    return maze; 
} 

我也纠正了循环结构。在您的原始示例中,您的while循环无效,只循环一次。您的for循环正在完成所有工作(未检查是否有要读取的行)。

其他意见:

  • 目前你的类可以简化成一个工具类用一个静态方法(虽然我明白,这可能在未来改变)。

  • 您有临时变量(例如row,colreadFile)作为字段存储在您的班级中;他们应该是你的方法中的变量。

  • 您似乎将二进制值(10)存储在数组中,但是作为整数存储。你可以考虑返回一个布尔数组。

+0

我真的很感激你花时间来解释。这些变化奏效了,我会考虑将数组切换为布尔值与整数。 – handro

+0

我将行,列和readfile作为字段存储在我的班级中,我可以从其他班级访问它们。但是我会忽略阅读文件,因为它没有意义。 – handro