2017-12-16 26 views
-1

Double Linkedデータ構造からファイルにデータを書き込もうとしていますが、Printwriter try catchブロック内でそのデータを印刷できません。ファイルへのデータ構造体データへのアクセスと書き込みtry tryでアクセスできないPrintWriter

public static void main(String[] args) { 
    /* Start with the empty list */ 
    LinkedList lk = new LinkedList(); 
    Order x = new Order("1", "x", 1); 
    Order y = new Order("2", "y", 1); 
    DoubleNode dll = new DoubleNode(); 
    File f = new File("/Users/Dell/Documents/product.txt"); 

    Product a = new Product("1", "a", 1, 1, 1.); 
    Product b = new Product("2", "b", 2, 2, 2.); 
    Product c = new Product("3", "c", 3, 3, 3.); 
    Product d = new Product("4", "d", 4, 4, 4.); 
    Product e = new Product("5", "e", 5, 5, 5.); 

    dll.append(b); 
    dll.push(d); 
    dll.push(a); 
    dll.append(c); 
    dll.InsertAfter(dll.head.next, e); 
    System.out.println("Created DLL is: "); 
    dll.printlistF(dll.head); 

    String filePath; 
    try { 
     f.createNewFile(); 
     filePath = f.getCanonicalPath(); 
    } 
    catch(IOException io) { 
     io.printStackTrace(); 
    } 

    if (f.exists()) { 
     System.out.println("File exist."); 
     System.out.println("File is readable: " + f.canRead()); 
     System.out.println("File is writeable: " + f.canWrite()); 
     System.out.println("File is location: " + f.getName()); 

    } 

    try { 
     PrintWriter output = new PrintWriter(f); 
     dll.printlistF(dll.head); //THIS IS THE PLACE I CANT FIGURE IT OUT 
     output.close(); 

    } catch (IOException e2) { 
     // TODO: handle exception 
     System.out.println("ERROR"+e2); 
    } 

} 

しかし、これは、try catchブロック内に新しいDoubleNodeを作成するために私を必要とする、と私は、DLLは、静的作るしようとしたとき、それは「違法修飾子は、唯一の最終が許可されている」と述べました。だから何をすべきか?私はここで似たようなトピックを検索するためのプログラミング用語については十分に分かっていないので、もし誰かがそれらへのリンクを持っていれば、それは高く評価されるだろう。

+0

静的メンバーは、そのクラスの特定のインスタンスではなく、クラス自体に属します。メソッド内でstaticキーワード修飾子を使用することはできません。変数を静的にするには、クラスレベルで宣言する必要があります。 – Zachary

+0

ファイルを開いて( 'new PrintWriter(f)')ローカル変数 'output'に代入しただけです。 *その値、すなわち 'output'値?!?!?例えば。 'dll.printlistF(output);'、 'dll.head'パラメータは必要ないはずですから。 – Andreas

答えて

0

しかし、これは、try catchブロック内に新しいDoubleNodeを作成するために私を必要とする、真実ではありません

。このライン:

dll.printlistF(dll.head); //THIS IS THE PLACE I CANT FIGURE IT OUT 

が動作するだけでだけでなく、以前のコード内からこの行:

dll.printlistF(dll.head); 

あなたの実際の問題は、あなたがどこのデータを印刷するにはprintlistFを伝える必要があることのようです。これを行うには、以下を行う必要があります。

  • は、出力用なりprintlistFメソッド宣言にPrintWriterパラメータを追加します。
  • tryブロック内の宛先を開いて(完了しています)、printlistF呼び出しで引数として渡します。

と私はDLLは、静的作るしようとしたとき、それは「違法修飾子は、唯一の最終が許可されている」と述べました。

  1. それを行うために必要であってはならないことはないが、それはおそらく、この場合には役に立ちません。
  2. dll変数はローカル変数です。ローカル変数はstaticとして宣言することはできません。
  3. 静的変数は、通常、OOプログラムのという悪い考えであるです。静的宣言が必要な場合は、通常、アプリケーション設計に問題があります。優れたAPIの設計では

    dll.printlistF(dll.head); 
    

    headフィールドは内部次のようになります。最後に、あなたのデザインと間違って何かが、あなたがこのようなリストを印刷する必要がある場合があり


実装の詳細、それは隠されるべきです。すなわちprivateと宣言される。また、dll.headをパラメータとして渡す代わりに、印刷メソッドでは対象オブジェクトのheadを使用する必要があります。すなわちthis.head

+0

プリントリストにPrintWriterパラメータを追加する方法を教えてください。 –

+0

エラー...何ですか?パラメータを宣言する方法はすでに明確です。あなたは 'main'メソッド宣言でそれを行い、あなたのDoubleNodeクラスで少なくとも4回それを行いました。 (ヘッド== NULL){ \t \t \tのSystem.out.println( "注文が見つからない場合は空+ \t \t見つからない場合 –

+0

「<パブリックブールsearchCusName(ノードヘッド、列X){ \t \t //チェックリストは空であってもかまいません。 \t \t \t falseを返します。 \t \t} \t \t //(head.data.getCus_name()== X){ \t \t \tのSystem.out.println( "注文を発見しました。")場合にヘッドがターゲット \t \tある場合、 \t \t \t head.data.print(); \t \t \t return true; \t \t} \t \t //見出さ \t \t戻りsearchCusName(head.next、X)まで自己それを呼び出します。 \t}> ' このコード行。私はそれをノード頭の代わりにthis.headを使用することができないし、何が問題なのかわからない。私のボキャブは限られているので、検索が役に立たない。 –

関連する問題