2016-10-18 7 views
2

私はリンクリストを使用しています。 (リンクリスト用)nodeクラスは、このようなものです:nodeクラスを使用するクラスstack、でBufferedWriterが2回目のデータを印刷しないのはなぜですか?

public class node { 
    String data; 
    node next; 
    node previous; 
} 

、私はプリントの値にメソッドprint()を書いて、print()は、以下のようなものです:

void print() throws IOException{ 
     try(BufferedWriter print=new BufferedWriter(new OutputStreamWriter(System.out))){ 
      node temp=this.getFirstNode(); 
      while(temp!=null){ 
       print.write(temp.getData()); 
       temp=temp.getNext(); 
      } 
      print.close(); 
     } 
    } 

stackクラスのインスタンスを2つ作成してprint()を呼び出すと、第1インスタンスのdataが出力されます。たとえば、コードの下に、それはBdataを印刷しない:

public static void main(String[] args) { 
     stack A=new stack(); 
     stack B=new stack(); 
     A.print(); 
     B.print(); 
    } 

私は多くのことを検索し、それを数回デバッグましたが、それは完全に実行されます。 2回目の理由でdataが印刷されない理由を理解できませんでした。

+1

私は印刷 'へお電話という推測をハザードと思います。 close() 'はデフォルトの出力ストリーム' System.out'を閉じます。一度閉じると、再び開くことはできません。 –

+0

@ d.j.brownそれは各インスタンスの1つのストリームのようではありませんか?それはすべてのインスタンスがそれを使用する一般的なストリームですか? – HMD

+0

'System.out'は' System'クラスの静的フィールドであり、それを使用するすべてのクラス/オブジェクトによって共有されます。代わりに 'print.flush()'を使用してください。ストリームを閉じないでください。 –

答えて

4

System.outを閉じました。これは、通常は行うべきではありません。 try-とリソースの構文を使用すると、通常のJavaにおけるベストプラクティスですがSystem.outを扱うとき、それは(:通常は間違って読んで):ちょうど冗長だ

void print() throws IOException{ 
    BufferedWriter print = new BufferedWriter(new OutputStreamWriter(System.out)); 
    node temp = this.getFirstNode(); 
    while(temp != null){ 
     print.write(temp.getData()); 
     temp = temp.getNext(); 
    } 
} 
関連する問題