将硬编码的迷宫读入多维数组

时间:2015-04-03 18:38:05

标签: java for-loop multidimensional-array java.util.scanner filereader

我早些时候试过问过,但我想我是以错误的方式问过的。

我需要将txt文件读入2D数组。

我的txt文件是一个代表墙,路径和外部的字符块。

它是一个硬编码的迷宫,所以角色必须以与文件相同的配置读入数组。

我试过多种方法,但我无法绕过它 继承人的代码

public static void main(String[] args) {
    File file = new File("//Mac//Users//Tucker//SPSU//Programming 2//mazehardcode");
    Scanner fileScanner = new Scanner(file);
    String mazeCode = fileScanner.nextLine();
    char buffer [][]= new char[80][80];
    new Thread(new Monitor()).start();
    while (fileScanner.hasNextLine()){
    for(int i = 0;i<buffer.length;i++){
        for(int j = 0;j<buffer[i].length;j++){

        }
    }
    }

多数民众赞成我可以毫无错误地获得,所以我需要帮助 我得到的错误与将字符串转换为char,或char转换为char [] []或其他任何行。

2 个答案:

答案 0 :(得分:1)

如果您的tilemap在文件中查找如下:

11111
10001
11101
10001
11111

您可以读取每一行并遍历每个字符并将其分配给char buffer[][]

int currentLine = 0;
while (fileScanner.hasNextLine()){

    String line = fileScanner.nextLine();
    for(int i = 0;i<line.length();i++){
        buffer[currentLine][i] = line.charAt(i);
    }
    currentLine++;
}

如果只将它存储在一行中:

1111110001111011000111111

你可以做一些模数和除法。 编辑:仅在贴图的宽度与缓冲区的长度相同时才有效

if(fileScanner.hasNextLine()){
    String line = fileScanner.nextLine();
    for(int i = 0;i<line.length();i++){
        buffer[i/buffer.length][i%buffer.length] = line.charAt(i);
    }
}

但是要注意水平的实际大小,所以如果大小会有所不同,也许你会在第一行中看到它的大小。

答案 1 :(得分:0)

如果您需要从文件中读取字符块,如下面的示例提及。

#########
#0000111#
#########

将String转换为Char数组后,可以使用System.Arraycopy将整行复制到缓冲区中。

int lineCount=0;
while (fileScanner.hasNextLine()){
  String line = fileScanner.nextLine();                                           
  System.arraycopy(line.toCharArray(),0,buffer[lineCount++],0,line.length());  
}