2016-04-13 16 views
0

私は現在ArrayListPrintWriterを使用することを学んでいます。私の教授は、複数のファイルを使用してファイルを分割する必要がある場所を割り当てました。PrintWriterArrayList。だから私はこのような何かに見えるためのループでPrintwriter秒を初期化:writersArrayList<PrintWriter>filePatternあるPrintWritersと.get()メソッドのArrayList

for (int i=1; i<=n; i++) { 
    try { 
    this.writers.add(new PrintWriter(new File(filePattern + i))); 
    } 
    catch (java.io.IOException e) { 
    System.out.println("File " + i + " not found."); 
    } 
} 

がソースです。 しかし私のwriteメソッドでは、私は実際に物事を書くためにこれらのPrintWriterを呼び出す必要があります。 int currentFileを使用してファイルを分割して回転しますが、名前を付けていないときにはにあるPrintWriterの使い方が正確ではありません。次のように "get"メソッドを使用できますか? :

public void write (String s) throws IOException { 
    if (this.writers.size() > 0) { 
    PrintWriter p = this.writers.get(currentFile); 
    p.println(s); 

    if (this.currentFile == (this.writers.size()-1)) { 
     this.currentFile = 0; 
    } 
    else { 
     this.currentFile++; 
    } 
    } 
    else { 
    System.out.println("No Writers currently exist"); 
    } 
} 

これは機能しませんか?もしそうでなければ、別の方法がありますか?

答えて

0

あなたはthis.currentFile0this.writers.size()-1の間にあるかどうかを確認していない場合は、まだIndexOutOfBoundsExceptionにもたらすことができるthis.writers.get(this.currentFile)this.writers[this.currentFile]を行うことができます。これは、シリアル(すなわち非並列)実行には有効です。

さらに、getterを使用してデータ(つまり、currentFile)にアクセスし、セッターがメンバーメソッドでもデータをクリーンに変更するよう助けてくれます。

+0

ええ、私はそれらを使用することに慣れていますが、何らかの理由で彼は最後の課題のように指定していないので、私は彼がこの1つのために使用しないようにしたいと思うかもしれません。私は知らないが、私はチャンスを取ることを望んでいない。 .get()はうまくいくはずですか?私の例のように、実際には正しく機能するはずですか? – Azmera

+0

@Azmeraリストにオブジェクト参照をいくつか入れ、インデックスを介してこれらのオブジェクト参照にアクセスする場合は、明示的なgetメンバメソッドまたはオーバーロードされた演算子[](まったく同じ "構文砂糖")を使用できます。 APIをご覧ください:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html – Matthias