2016-12-01 279 views
-3

我一直在尝试编程一个叫做Sokoban的游戏,在过去的几天里。游戏的级别是简单的.txt文件,你可以交换。我已经使用BufferedReader读取了.txt文件,但将其保存到二维char数组时存在问题,因为每个级别的行数和列数都不相同。有人告诉我要利用charAt,但我该怎么做。Java:二维字符阵列

Sokobanlevel格式(http://www.sokoban-online.de/help/sokoban/level-format.html

希望你能帮助我。谢谢。

String file = "..."; 
BufferedReader br = Files.newBufferedReader(); 
String line = null; 
int rows = file.length; 
int cols = file[0].length; 
char[][] room = new char [rows][cols];   
while ((line = br.readLine()) != null) { 
      System.out.println(room[rows][cols]); 
     } 
+0

使用ArrayList。或者只是使用CSV阅读器库。这可能更容易。 – DejaVuSansMono

+0

可能重复的[convert string to arraylist in java](http://stackoverflow.com/questions/15331637/convert-string-to-arraylist-character-in-java) –

+0

@ LucasKot-Zaniewski理论上它是肯定的,但我不知道OP是否会得到它。 – DejaVuSansMono

回答

0

没有你需要阅读一切从文件的文件中的行数knowlege先确定行数。如果你使用List<char[]>来存储每一行​​的char数组,这将是最简单的。

你可以很容易地编写具有相同功能的东西在Java 8虽然一个班轮:

File fl = new File(file); 
char[][] array = Files.lines(fl.toPath()).map(String::toCharArray).toArray(char[][]::new); 
0

可以初始化二维数组,每行有不同的列数:

char[][] c = new char[7][]; 
c[0] = new char[5]; 
c[1] = new char[3]; 
//etc 
+0

问题是我不能在txt文件中的[] cuz级别写入数字可能有3x3,4x7或其他措施。所以我必须创建一个可以交换级别的char数组,并且我不知道这些措施。 –