1

Android ゲーム用のシンプルなレベル エディターに取り組んでいます。私は、swing を使用して (グリッドを描画する) GUI を作成しました。タイルを配置したい四角をクリックすると、色が変わります。完了したら、すべてをファイルに書き込みます。

私のファイルは次のようなもので構成されています(これは単なる例です):

ここに画像の説明を入力

アスタリスクを使用して、読み取られるレベル番号を決定し、ハイフンを使用して読み取りを停止するように読者に伝えます。

私のファイル読み取りコードは以下のとおりです。たとえば、読み取る部分を選択しても問題ありません。次のようにして2を渡すと:

readFile(2);

次に、2 番目のセクションのすべての文字を出力します。

私が理解できないのは、「開始」点に到達した後、個々の文字ではなく整数として数値を実際に読み取るにはどうすればよいかということです。

コード

    public void readFile(int level){

        try {
                    //What ever the file path is.
                    File levelFile = new File("C:/Temp/levels.txt");
                    FileInputStream fis = new FileInputStream(levelFile);
                    InputStreamReader isr = new InputStreamReader(fis);    
                    Reader r = new BufferedReader(isr);
                    int charTest;

                    //Position the reader to the relevant level (Levels are separated by asterisks)
                    for (int x =0;x<level;x++){
                    //Get to the relevant asterisk
                    while ((charTest = fis.read()) != 42){
                     }
                    }
                    //Now we are at the correct read position, keep reading until we hit a '-' char
                    //Which indicates 'end of level information'
                    while ((charTest = fis.read()) != 45){

                    System.out.print((char)charTest);   
                    }

                    //All done - so close the file
                    r.close();
                } catch (IOException e) {

                    System.err.println("Problem reading the file levels.txt");
                }


    }
4

4 に答える 4

2

スキャナーは良い答えです。あなたが持っているものに近づけるために、BufferedReader を使用して (一度に 1 文字ずつではなく) 行全体を読み取り、Integer.parseInt を使用して String から Integer に変換します。

// get to starting position
BufferedReader r = new BufferedReader(isr);
...
String line = null;
while (!(line = reader.readLine()).equals("-"))
{
  int number = Integer.parseInt(line);
}
于 2013-07-10T16:24:14.597 に答える
1

インターフェイスではBufferedReaderなくを使用する場合は、 を呼び出すことができます。その後、単にまたはを使用できます。Readerr.readLine()Integer.valueOf(String)Integer.parseInt(String)

于 2013-07-10T16:24:10.540 に答える
1

おそらくreadLine、すべての文字を行末まで取得する which の使用を検討する必要があります。

この部分:

for (int x =0;x<level;x++){
    //Get to the relevant asterisk
    while ((charTest = fis.read()) != 42){
    }
}

これに変更できます:

for (int x =0;x<level;x++){
    //Get to the relevant asterisk
    while ((strTest = fis.readLine()) != null) {
        if (strTest.startsWith('*')) {
             break;
        }
    }
}

次に、値を読み取るために別のループを実行します。

for (;;) {
    strTest = fls.readLine();
    if (strTest != null && !strTest.startsWith('-')) {
        int value = Integer.parseInt(strTest);
        // ... you have to store it somewhere
    } else {
        break;
    }
}

ファイルの早期終了などのエラーを処理するために、そこにいくつかのコードも必要です。

于 2013-07-10T16:24:32.393 に答える
0

Java の Scanner API を確認する必要があると思います。彼らのチュートリアルを見ることができます

于 2013-07-10T16:17:51.630 に答える