将文本转换为二维数组
Convert text to 2d array
我正在尝试用文本文件填充二维数组。
我的文本文件如下所示:
#######
# .# @#
# # #
#$##$##
# # #
# #
#######
它基本上是一个游戏级别。我的最终二维数组应如下所示:
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] = #;
我的尝试是读取行,将它们转换为一维数组并用 2 个循环填充二维数组。然后我需要把它们打印出来。
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++){
我也变成了错误:
线程 "main" java.lang.ArrayIndexOutofBoundException:0 中的异常 pp.main(pp.java:18)
就是这里
array2d [rows][columns] = array1d [columns];
而且我也无法打印出 array2d(代码未显示)。例如,当我尝试获取 [6][0] 时,它什么都不做。
我真的搜索并尝试了几个小时,我希望你能帮助我。
您还可以通过在调用
In.readLine();
您输入的字符串已正确转换为字符数组。但是你可以将它直接设置到你的数组中。正如上面的评论所述,没有正确实例化。你有 7 列和 7 行,因此你需要
new char[7][7]
但是当你调用第一个元素时,计数总是从 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);
}
}
所以在这个例子中,我将二维数组中的第一行设置为等于整个列表。因此,从这里可以很容易地找到问题的完整解决方案,而无需使用那么多行代码。
Java 8 Streams 使从文本文件创建二维字符数组变得非常容易。
char[][] array2d = Files.lines(file.toPath())
.map(String::toCharArray)
.toArray(char[][]::new);
一个区别是您的文本文件将决定二维字符数组的大小。
我正在尝试用文本文件填充二维数组。
我的文本文件如下所示:
#######
# .# @#
# # #
#$##$##
# # #
# #
#######
它基本上是一个游戏级别。我的最终二维数组应如下所示:
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] = #;
我的尝试是读取行,将它们转换为一维数组并用 2 个循环填充二维数组。然后我需要把它们打印出来。
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++){
我也变成了错误:
线程 "main" java.lang.ArrayIndexOutofBoundException:0 中的异常 pp.main(pp.java:18)
就是这里
array2d [rows][columns] = array1d [columns];
而且我也无法打印出 array2d(代码未显示)。例如,当我尝试获取 [6][0] 时,它什么都不做。
我真的搜索并尝试了几个小时,我希望你能帮助我。
您还可以通过在调用
In.readLine();
您输入的字符串已正确转换为字符数组。但是你可以将它直接设置到你的数组中。正如上面的评论所述,没有正确实例化。你有 7 列和 7 行,因此你需要
new char[7][7]
但是当你调用第一个元素时,计数总是从 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);
}
}
所以在这个例子中,我将二维数组中的第一行设置为等于整个列表。因此,从这里可以很容易地找到问题的完整解决方案,而无需使用那么多行代码。
Java 8 Streams 使从文本文件创建二维字符数组变得非常容易。
char[][] array2d = Files.lines(file.toPath())
.map(String::toCharArray)
.toArray(char[][]::new);
一个区别是您的文本文件将决定二维字符数组的大小。