0

いくつかの値を含むファイルがあります:

11
8
0 0 1 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0
0 1 1 0 1 1 1 0 1 1 0
1 1 1 1 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1 1 0 1
1 0 1 0 0 0 0 0 1 0 1
0 0 0 1 1 0 1 1 0 0 0

これらの値を 2D に読み込む必要がありますArrayList。最初の 2 つの値 (11 と 8) は、それぞれ行と列の数になります。コードは次のとおりです。

            Scanner scanner = new Scanner(file);

            int x, y;

            x = scanner.nextInt();
            System.out.println(x + " has been read");

            y = scanner.nextInt();
            System.out.println(y + " has been read");


            ArrayList<ArrayList<Boolean>> pixelMap;
            pixelMap = new ArrayList<ArrayList<Boolean>>();
            ArrayList<Boolean> buffer_line = new ArrayList<Boolean>();

            Boolean buffer;


            for (int i = 0; i < x; i++){
                for (int j = 0; j < y; j++){
                    buffer = scanner.nextBoolean();
                    System.out.println(buffer + " has been read");
                    //buffer_line.add(buffer);
                }
                //pixelMap.add(buffer_line);
                //buffer_line.clear();
            }

問題は、プログラムが最初の 2 つの数値を正常に読み取り、ブール値になると、オンラインで InputMismatch 例外をスローすることです。

buffer = scanner.nextBoolean();

だから私はその理由を理解できません。0次に読む必要があり、ブール値です-では、実際に何が一致していないのでしょうか?

bufferまた、 type を integer に変更してから assign するとscanner.nextInt()、プログラムはすべての値を適切に読み取るため、出力にすべての値が表示されることも指摘します。もちろん、それをArrayList 機能させるために Integer に変更できますが、ブール値のみを保持するため、意味的に間違っています。誰でも問題を見つけるのを手伝ってもらえますか?

4

1 に答える 1

1

コードには次のステートメントがあります。

buffer = scanner.nextBoolean();

しかし、入力ファイルにboolean値がtrue表示されません。false

Java では、C などの他の言語のように、0 と 1 はブール値として扱われません。

これらの値を として読み取りint、手動でboolean値にマップする必要があります。

次のようなロジックを作成します。

int val = scanner.nextInt();
boolean buffer = (val == 1) ? true : false;
于 2015-11-08T22:59:37.053 に答える