1

テキスト ファイルを使用してゲーム オブ ライフのクローンを作成し、開始ボードを指定してから、完成したボードを同様の形式で新しいテキスト ファイルに書き込みます。たとえば、これをロードします。

搭乗:

wbbww
ばぶ
wwwww
ばぶばぶ
ぽっちゃり

ファイルから、次のようなものを出力します。

ボードアウト:

wbbww
ばぶ
wwwww
wwwww
ぽっちゃり

これを行うには、文字の 2D 配列 ( char[][] board) を作成し、ファイルを 1 行ずつ文字列に読み取り、 を使用String.charAt()して各文字にアクセスし、配列に格納します。

その後、board の各要素 (つまり、 、 など) を を使用して文字列に変換board[0]board[1]String.valueOf()それを 2 番目のファイルの新しい行に書き込みます。

私がこれを行うのはばかであり、ファイル -> 文字列 -> 配列 -> 文字列 -> ファイル プロセスを実行するより良い方法があることを教えてください。

4

4 に答える 4

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
// Remember to handle whitespace chars in array
char[] row = "wbbbw bbbbb wwwww wbwbw bwbwb".toCharArray()

他のすべては良さそうです。

于 2012-07-13T02:27:17.297 に答える
0

独自のテキスト形式を発明するのではなく、JSON などの既存のテキスト形式を使用してみませんか?

2 次元配列を読み書きできる JSON パーサーはたくさんあります。

(元の方法と同様に) ファイルから直接簡単に読み取ることができるという利点と、面倒な文字列形式を解析する必要がないという利点の両方が得られます。

于 2012-07-13T02:30:08.107 に答える
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 に答える