1

宿題として、マップを含む txt ファイルを読み込む必要があります。マップでは、その内容を読み取り、それらを 2 次元配列に配置することになっています。

ファイルを 1 次元の String ArrayList に読み込むことができましたが、問題はそれを 2 次元の char 配列に変換することです。

これは私がコンストラクターでこれまでに持っているものです:

try{

  Scanner file=new Scanner (new File(filename));

    while(file.hasNextLine()){

        ArrayList<String> lines= new ArrayList<String>();

        String line= file.nextLine();

        lines.add(line);    

        map=new char[lines.size()][];

    }
}
catch (IOException e){
    System.out.println("IOException");
}

lines.size() を出力すると 1 が出力されますが、ファイルを見ると 10 になっています。

前もって感謝します。

4

2 に答える 2

4

ループのでリストを作成する必要があります。実際の実装では、新しい行ごとに新しいリストを作成するため、常にサイズが 1 になります。

// ...
Scanner file = new Scanner(new File(filename));
List<String> lines = new ArrayList<String>();  // <- declare lines as List
while(file.hasNextLine()) {
// ...

ところで - 私はchar[][]変数に名前を付けませんmap。Map はまったく異なるデータ構造です。これは配列であり、ループ内で作成すると、リストで発生したのと同じ問題が発生する可能性があります。しかし今、あなたは簡単な修正を知っているはずです ;)

于 2012-09-26T06:38:11.997 に答える
0

次のようにコードを変更します。

public static void main(String[] args) {
        char[][] map = null;
        try {
            Scanner file = new Scanner(new File("textfile.txt"));
            ArrayList<String> lines = new ArrayList<String>();
            while (file.hasNextLine()) {
                String line = file.nextLine();
                lines.add(line);
            }
            map = new char[lines.size()][];
        } catch (IOException e) {
            System.out.println("IOException");
        }
        System.out.println(map.length);
    }
于 2012-09-26T06:44:57.807 に答える