1

我想使用文本文件制作一个生命游戏克隆来指定我的起始板,然后将完成的板以类似格式写入一个新的文本文件。例如加载这个:

登机:

bbbbw
bbbb
万维网
wbwbw
bwbwb

从文件中,然后输出如下内容:

登机:

bbbbw
bbbb
万维网
万维网
bwbwb

为此,我创建了一个字符的二维数组 ( char[][] board),将文件逐行读取为字符串,然后使用String.charAt()来访问每个字符并将其存储在数组中。

之后,我使用 将 board 的每个元素(即 、board[0]board[1])转换回字符串String.valueOf(),并将其写入第二个文件中的新行。

请告诉我,我这样做是个白痴,并且有更好的方法来遍历文件-> 字符串-> 数组-> 字符串-> 文件进程。

4

4 回答 4

0
// Remember to handle whitespace chars in array
char[] row = "wbbbw bbbbb wwwww wbwbw bwbwb".toCharArray()

其他一切似乎都很好。

于 2012-07-13T02:27:17.297 回答
0

为什么不使用现有的文本格式(例如 JSON)而不是自己发明呢?

有大量的 JSON 解析器可以读取和写入二维数组。

您可以获得直接从文件中轻松读取的好处(与您的原始方法一样)以及不必解析烦人的字符串格式的好处。

于 2012-07-13T02:30:08.107 回答
0
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class GameOfLife
{
    private String mFilename;
    private ArrayList<String> mLines;

    public GameOfLife(String filename)
    {
        mFilename = filename;
        read();
    }

    public char get(int x, int y)
    {
        String line = mLines.get(y);
        return line.charAt(x);
    }

    public void set(char c, int x, int y)
    {
        String line = mLines.get(y);
        String replacement = line.substring(0, x) + c + line.substring(x + 1, line.length());
        mLines.set(y, replacement);
    }

    private void read()
    {
        mLines = new ArrayList<String>();

        try
        {
            BufferedReader in = new BufferedReader(new FileReader(mFilename));
            String line = in.readLine();

            while (line != null)
            {
                mLines.add(line);
                line = in.readLine();
            }
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    private void write()
    {
        try
        {
            BufferedWriter out = new BufferedWriter(new FileWriter(mFilename));

            for (String line : mLines)
            {
                out.write(line + "\n");
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}
于 2012-07-13T02:40:03.740 回答
0

您可以String.toCharArray()在读取文件时使用每一行。

char[][] board = new char[5][];
int i = 0;
while((line = buffRdr.readLine()) != null) {
    board[i++] = line.toCharArray();
}

在写String.valueOf()或时java.util.Arrays.toString()

for(int i=0; i<board.length; i++) {
    //write Arrays.toString(board[i]);
}
于 2012-07-13T02:51:27.997 回答