我将一个文本文件转换成一个二维的字符数组,并获取特定字符的索引。
我有这个任务,我需要阅读Map,这是文本文件,并找到最短的路线了。到目前为止,我已经将文本文件转换为char数组,但是如果我在控制台上打印Map,就会丢失一些字符。不知为何,我找不到正确的起点位置。
我的想法是使用我在二元迷宫中发现的相同逻辑。如果你读了这篇文章,认为我在做一些非常愚蠢的事情,那么请让我知道。
首先,我创建了两个方法来获取map中的行数和列数:
private static int getRowsOfTheMap() throws IOException {
int rows = 0;
BufferedReader reader = getReader(filePath);
while (reader.readLine() != null) rows++;
reader.close();
return rows;
}
private static int getColumnsOfTheMap() throws IOException {
BufferedReader reader = getReader(filePath);
String firstRow = reader.readLine();
return firstRow.length();
}
然后,我创建了一个方法来获取2D char数组的map:
private static char[][] getMapFromFile() throws IOException {
char[][] map = new char[getRowsOfTheMap()][getColumnsOfTheMap()];
BufferedReader reader = getReader(filePath);
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[0].length; j++) {
map[i][j] = (char) reader.read();
}
}
return map;
}
以及获取起点的方法:
private static int[] getStartingPoint(char[][] map) {
int[] startingPoint = {
-1,
-1
};
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if (map[i][j] == 'X') {
startingPoint[0] = i;
startingPoint[1] = j;
}
}
}
return startingPoint;
}
从文本文件Map和Map输出。
[1][2][3][4][5][6][7][8]
3条答案
按热度按时间8fq7wneg1#
我能够生成正确的Map,并以
[1, 2]
为起点,代码如下:改编自你的我创建了一个
Maze
类,使用map
方法填充map
、rows
和columns
字段。此外,我创建了一个
startingPoint
方法来返回起始点行和列索引的int[]
。最后,我创建了一个重写的
toString
方法来打印迷宫。您可以使用
Arrays.binarySearch
查找X
。hgc7kmma2#
将读取您的迷宫,而不需要任何标题。只要把迷宫本身储存起来就行了。
您的问题源于阅读行分隔符。它们是存在的,因为没有被
readLine
调用使用n9vozmp43#
您的问题似乎出在与阅读文件并将其存储在Map中相关的逻辑中。
您可以简单地读取文本文件并存储所有行。
然后,总行=行数
和总列=第一行的大小
这样,您就不必多次打开该文件。
关于阅读每一行存储在char数组=>
由于您的输入包含空格和换行符,因此最好使用
reader.readline()
而不是reader.read()
。阅读更多关于read()和readLine()的内容:
BufferedReader read() not working
BufferedReader will not read final line of input
但是,您也可以使用更简单的逻辑,如下面的示例代码来读取文件并存储它: