2

私はJavaにかなり慣れていないので、データをファイルに読み書きするための2つの小さな関数を作成しました。書き込まれるデータは、ゲーム内のマップ上のキャラクターのx座標とy座標です。ファイルに書き込まれたデータは問題ないようです。

234
-123

次のコードでデータを書き込みます。

public void save(int x, int y)
{
    try
    {
        FileWriter fstream = new FileWriter("skygrim.txt");  //Create save-file
        BufferedWriter out = new BufferedWriter(fstream);    //New writer, connected to save-file
        out.write(x + "\n" +y);        //Write position to file 
        out.close();                   //Close file
    }catch (Exception e){System.out.println("Error: " + e.getMessage());}
}

後でデータを読み取りたいときに、保存したゲームを「ロード」できるようにするために、ファイルから次の値を取得します。

50
51

次のコードを使用してファイルから読み取ります。

public int[] read(String file)
{
    int[] coordinates = new int[2];
    try
    {
        FileReader fstream = new FileReader(file);
        BufferedReader in = new BufferedReader(fstream);
        coordinates[0] = in.read();
        coordinates[1] = in.read();
        in.close();
    }catch(Exception e){System.out.println("Error" + e.getMessage());}
    System.out.println("x: " + coordinates[0]);
    System.out.println("y: " + coordinates[1]);
    return coordinates;
}

プログラムがファイルをひどく間違って読み取るのはなぜですか、そしてそれについて何ができますか?

4

4 に答える 4

8

readメソッドは、ファイルの最初の2文字「2」と「3」を読み取ります。おそらくBufferedReader.readLine()を使用したいと思うでしょう

Integer.parseInt(String)も参照してください

于 2012-05-29T17:44:30.557 に答える
2

BufferedReader.read()ではなく、単一の文字を読み取りますintjava.util.Scannerとその方法を使用する可能性がありますnextInt()

于 2012-05-29T17:44:38.137 に答える
0

readLine()オブジェクトのメソッドを使用して、メソッドのBufferedReaderように1文字を読み取らないようにread()します。

coordinate[0] = Integer.parseInt(reader.readLine());
coordinate[1] = Integer.parseInt(reader.readLine());
于 2012-05-29T17:49:01.260 に答える
0
 coordinates[0] = in.read();
 coordinates[1] = in.read();

各呼び出しで1バイトのみを読み取ります。この場合、「2」と「3」を取得しています(50と51はそれらのASCIIコードです)。したがって、間違った値です。

于 2012-05-29T17:44:11.837 に答える