繁体   English   中英

从txt.file读取到2D数组中的数据值被翻转

[英]Data values read from txt.file into 2D array are getting flipped

我需要用二维数组中位置[0] [0]处的字符串值标记迷宫的开头。 问题在于,每次读取新行时,位置[i] [0]上的值都可以更改,我需要它始终是位置[0] [0]上的第一个值。 没有空格或定界符,因此我正在读取每一行每一行中的每个char值。

我只是想知道迷宫[0] [0]上的字符串是我想要设置为1的字符串,所以想不出如何得到它?

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

因此,我将文件读取为String值,然后将第一行String值解析为int,并使用这些值定义我的2D整数数组。

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

我遇到的问题是它适用于前3行,但其余行的值1和0却被翻转了。 我已经附上了代码的嗅探,即正在读取的.txt文件。 我知道这是因为它会将自己与每一行的第一个元素进行比较,而对于前三行,它是一个“”。 然后是其余行的“ +”号。

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
..+.+.++++++
.++...++...+
..++.....+.+
+.+..++.+..+
+...++....++
+.+++..++..+
++++++++++..

输出-右

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

输出-错误

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

您的错误在内部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循环正在完成所有工作(不检查是否有要读取的行)。

其他观察:

  • 当前,您可以通过一个静态方法将您的类简化为实用程序类(尽管我知道将来可能会改变)。

  • 您将临时变量(例如rowcolreadFile )存储为类中的字段; 它们应该是您方法中的变量。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM