-1

わかりました、これをもう一度試してみましょう。タイトルが悪くて申し訳ありません。これを何と呼べばいいのかわかりません。私はこれまでファイル I/O をあまり行ったことがありませんでした。個人的には、Java は絶対にひどいと思いますが、それでもやらなければなりません。

ちょっとした背景情報です。これは私の Conway の Game of Life プロジェクトであり、他のすべてのコードは問題なく動作します。あとは I/O を実行するだけです。

次のようなテキスト ファイルから読み込んでいます

したがって、これが行うことは、最初の 2 つの数値が配列に必要なサイズであり、その後の文字列は無関係です。そして、この例ではセル配列の配列が続きます。それはグライダーの配列です。今私の問題は、最初の行を文字列に格納し、残りを配列に格納する方法がわからないことです。以下は私が行ったことであり、n^∞ の Big 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グリッドを参照する 2 つの外側のループと、ファイルの行を参照する 2 つの内側のループがあります。そうすることで、基本的に、ファイルのすべての行のすべての文字を、グリッドの各セルに次々と書き込んでいます。最終的に、ファイルの最後の行の最後の文字が のすべてのセルに表示されますnewArray。これはおそらくあなたがしたいことではありません。

編集:私が正しく理解していれば、ファイルの先頭にある数字は、それに続くデータの行数と列数です。次に、外側の 2 つのループを使用し、 と を使用rowして、行内の行と行内の文字にcolそれぞれアクセスするだけです。list

于 2013-02-26T01:10:18.270 に答える