0

次のルーチン出力は、チェス エンジンから JTextArea に移動します。

public void getEngineOutputOriginal(Process engine) 
{
    try {           
        BufferedReader reader =
          new BufferedReader (new InputStreamReader (engine.getInputStream ()), 1);
        String lineRead = null;
        // send engine analysis to print method
        while ((lineRead = reader.readLine ()) != null)
           Application.showEngineAnalysis (lineRead);
    }
    catch (Exception e) {
                      e.printStackTrace();
    }
}

サンプル出力は次のようになります

           12     3.49  39/40?  2. b4      (656Knps)             
           12     3.49  40/40?  2. Nd5     (656Knps)             
           12->   3.51   0.04   2. Bxf4 Be6 3. Be3 Qa5 4. Nd5 Qxd2
           13     3.51   1/40?  2. Bxf4    (655Knps)   

次のように、最後に読み取られた行が常に下部ではなく上部に表示されるように、プロセスを逆にすることは可能ですか?

           13     3.51   1/40?  2. Bxf4    (655Knps)   
           12->   3.51   0.04   2. Bxf4 Be6 3. Be3 Qa5 4. Nd5 Qxd2
           12     3.49  40/40?  2. Nd5     (656Knps)             
           12     3.49  39/40?  2. b4      (656Knps)     

Google で調べましたが、解決策が見つかりませんでした

4

1 に答える 1

2

もちろん!1 つのオプションは、行を にバッファリングArrayListし、最後にすべて逆の順序で表示することです。

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

/* Add all lines from the file to the buffer. */
while((lineRead = reader.readLine()) != null) {
    lines.add(lineRead);
}

/* Replay them in reverse order. */
for (int i = lines.size() - 1; i >= 0; i--) {
     Application.showEngineAnalysis(lines.get(i));
}

概念的に言えば、これはスタックを作成し、すべての行をスタックにプッシュしてから、一度に 1 つずつポップすると考えることができます。

お役に立てれば!

于 2012-06-11T21:20:18.133 に答える