好吧,让我们再试一次,抱歉这个糟糕的头衔我不知道怎么称呼这个。我之前没有做太多文件I / O,我个人认为Java绝对可怕,但我必须这样做。
一些背景信息,这是我的Conway的生命游戏项目,我的所有其他代码工作正常,我现在只需要进行I / O.
我正在从文本文件中读取,看起来像this。
所以这样做的前两个数字是数组所需的大小,后面的String是无关紧要的。之后是本例中的单元布置数组,它是滑翔机的数组。现在我的问题是我不知道如何在String中存储第一行,其余的在数组中。以下是我所做的事情,并为nO∞的大O做好准备。
public char[][] fileIO(){
ArrayList<String> list = new ArrayList<String>();
char[][] newArray;
String[] tokens;
BufferedReader reader;
String inputLine;
try{
reader = new BufferedReader(new FileReader("untitled.txt"));
while((inputLine = reader.readLine()) != null){
list.add(inputLine);
}
reader.close();
}catch (IOException e){
System.out.println(e);
}
tokens = list.get(0).trim().split("\\s+");
newArray = new char[Integer.parseInt(tokens[0])][Integer.parseInt(tokens[1])];
for(int row = 0; row < newArray.length; row++){
for(int col = 0; col < newArray[row].length; col++){
for(int line = 1; line < list.size(); line++){
for(int Char = 0; Char < list.get(line).length(); Char++){
newArray[row][col] = list.get(line).charAt(Char);
}
}
}
}
return newArray;
}
我知道缺少评论,所以我会尝试解释我现在尝试做的事情;
我从文件中读取并将其全部存储在ArrayList
得到了第一个像(10 20 Glider)的标记,并创建了一个实例化的数组,其值为10和20
然后继续循环遍历数组的行和列,然后循环输入数组的每一行,然后循环遍历该行的每个字符,以便在其所在位置添加到数组中。
然而,这似乎不起作用,我确信有一种更简单有效的方法。所以我再问一遍,有谁能告诉我一个更简单的方法来做这个I / O?我不需要代码,只需要解释如何操作。
答案 0 :(得分:2)
在此:
for(int row = 0; row < newArray.length; row++){
for(int col = 0; col < newArray[row].length; col++){
for(int line = 1; line < list.size(); line++){
for(int Char = 0; Char < list.get(line).length(); Char++){
newArray[row][col] = list.get(line).charAt(Char);
}
}
}
}
您有两个正在浏览newArray
网格的外部循环,以及两个正在浏览文件行的内部循环。通过这样做,您实际上是将文件的每一行的每个字符写入网格的每个单元格中,一个接一个。最后,您将在newArray
的所有单元格中拥有文件最后一行的最后一个字符。这可能不是你想要做的。
编辑:如果我理解正确,文件开头的数字就是行数和后面数据的列数。然后你只需要使用两个外部循环,并使用row
和col
分别访问list
中的行和行中的字符。