将文本转换为2d数组

时间:2016-08-19 02:07:08

标签: java arrays 2d

我试图用文本文件填充二维数组。

我的文本文件如下所示:

#######
# .# @#
#  #  #
#$##$##
#  #  #
#     #
#######

它基本上是游戏的一个级别。我的最终2d阵列应如下所示:

char [][] a = new char [6][6];

a[0][0] = #; a[0][1] = #; ... a[0][6] = #;
a[1][0] = #; a[1][1] =  ; a[1][2] = . ; ... a[1][6] = #;
.
.
.
a[6][0] = #;        . . .     a[6][6] = #;   

我的尝试是读取行,将它们转换为1d数组,并用2个循环填充2d数组。然后我需要打印出来。

public class pp {

public static void main (String[] args) {

char [][]array2d = new char [6][7];

In.open("Level2.txt");

    while (In.done()){

        for (int rows=0; rows<7; rows++){

            String string = In.readLine();
            char [] array1d = string.toCharArray();

                for(int columns=0; columns<7;columns++){

                    array2d [rows][columns] = array1d [columns];
                    Out.print(array2d[rows][columns]);  

                    }                                       

            Out.println(); 

        }

    }

In.close();}}

奇怪的是,当我将列设置为7

时,它只打印出所有内容
char [][]a = new char [6][7];

和行到6

 for (int rows=0; rows<6; rows++){

我也成了错误:
    线程&#34; main&#34;中的例外情况java.lang.ArrayIndexOutofBoundException:0 at pp.main(pp.java:18)

那就是

array2d [rows][columns] = array1d [columns];

我也无法打印出array2d(代码未显示)。当我试图以[6] [0]为例时,它什么也没做。

我正在搜索并尝试几个小时,我希望你能帮助我。

2 个答案:

答案 0 :(得分:1)

Java 8 Streams使得从文本文件创建二维字符数组变得非常容易。

char[][] array2d = Files.lines(file.toPath())
    .map(String::toCharArray)
    .toArray(char[][]::new);

一个区别是你的文本文件将决定二维字符数组的大小。

答案 1 :(得分:0)

通过实现调用

,您还可以大大减少代码,从而不需要这么多for循环
In.readLine();

你正在接受一个你正确变成char数组的字符串。但是你可以直接将它设置到你的数组中。正如上面的评论所述,未正确实例化。你有7列7行,所以你需要

new char[7][7]

但是当你打电话说第一个元素计数总是STARTS AT 0.所以char [0] [0]会输出第一个元素

例如

public class HelloWorld
{
  public static void main(String[] args)
  {
    char[][] x = new char[7][7];
    char[] h = "Helpers".toCharArray();
    x[0] = h;
    for (char c : x[0]) System.out.println(c);
   }
}

所以在这个例子中,我将2D数组中的第一行设置为整个列表。因此,从这里可以轻松找到问题的完整解决方案,而无需使用如此多的代码行。