-1

好吧,让我们再试一次,对不起,我不知道该怎么称呼这个糟糕的标题。我以前没有做过很多文件 I/O,我个人认为 Java 在这方面绝对是糟糕的,但我还是必须这样做。

一些背景信息,这是我的 Conway 的生命游戏项目,我所有的其他代码都可以正常工作,我现在只需要进行 I/O。

我正在从一个看起来像这样的文本文件中读取。

所以它的作用是前两个数字是数组需要的大小,它们后面的字符串是无关紧要的。之后是本例中单元格排列的数组,它是滑翔机的排列。现在我的问题是我不知道如何将第一行存储在字符串中,其余的存储在数组中。以下是我所做的,并为 n^∞ 的大 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

  • 得到第一个like的标记(10 20 Glider),并创建了一个实例化的数组,其值为10和20

  • 然后继续循环遍历数组的行和列,然后是输入数组的每一行,然后循环遍历该行的每个字符,以在其相应位置添加到数组中。

但是,这似乎不起作用,我相信有一种更简单有效的方法可以做到这一点。所以我再问一次,谁能告诉我做这个 I/O 的更简单的方法?我不需要代码,只是解释如何这样做。

4

1 回答 1

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。这可能不是您想要做的。

编辑:如果我理解正确,文件开头的数字是后面数据的行数和列数。然后你只需要使用两个外部循环,并使用rowandcol分别访问行中的行list和行中的字符。

于 2013-02-26T01:10:18.270 回答