2017-12-16 4 views
-1

Im Versuch, Daten aus einer Doppel verknüpften Datenstruktur in eine Datei zu schreiben, aber kann nicht einen Weg finden, es in dem Printwriter zu drucken catch-Block versuchen:Zugriff und Datenstruktur Daten schreibt in Datei, aber kippe Zugang in Try-Catch-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); 
    } 

} 

Aber das würde mich benötigen einen neuen DoubleNode innerhalb des try catch-Block zu erstellen, und als ich versuchte, dll statisch, es sagte „illegal Modifikator, nur endgültig ist erlaubt“ zu machen. Also was soll ich tun? Ich weiß nicht genug über Programmbegriffe, um hier nach ähnlichen Themen zu suchen, also wenn jemand Links zu ihnen hat, würde es geschätzt werden.

+0

statische Mitglieder gehören zur Klasse selbst als auf eine bestimmte Instanz dieser Klasse gegenüber.Sie können den statischen Schlüsselwortmodifikator nicht innerhalb einer Methode verwenden, da Sie sich gerade in dieser Instanz befinden. Wenn Sie möchten, dass die Variable statisch ist, müssen Sie sie auf Klassenebene deklarieren. – Zachary

+0

Sie haben gerade die Datei zum Schreiben geöffnet ('new PrintWriter (f)') und diese der lokalen Variable 'output' zugewiesen, also denken Sie nicht, dass die' printlistF' Methode, die zum Schreiben der Datenstruktur verwendet wird, vielleicht * benötigt * Dieser Wert, dh der 'output' Wert?!?!? Z.B. 'dll.printlistF (output);', da der Parameter 'dll.head' nicht benötigt wird. – Andreas

Antwort

0

Aber das würde mich benötigen einen neuen DoubleNode innerhalb des try catch-Block zu erstellen,

Das ist nicht wahr. Diese Zeile:

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

wird von oben in dem Code genau so gut wie diese Linie arbeiten:

dll.printlistF(dll.head); 

Ihr eigentliches Problem scheint zu sein, dass Sie benötigen printlistF zu sagen, wo die Daten zu drucken. Um das zu tun, müssen Sie:

  • einen PrintWriter Parameter an die printlistF Methode Erklärung hinzufügen, die das Ziel für die Ausgabe sein werden.
  • öffnen Sie das Ziel innerhalb des Try-Block (Sie das getan haben) und es als Argument in der printlistF Aufruf übergeben.

und als ich versuchte, dll statisch zu machen, sagte sie „illegal Modifikator ist nur endgültig erlaubt“.

  1. Es sollte das tun nicht nicht notwendig, und es wäre wahrscheinlich in diesem Fall nicht helfen.
  2. Das dll Variable ist eine lokale Variable. Lokale Variablen können nicht als statisch deklariert werden.
  3. Statische Variablen sind in der Regel eine schlechte Idee in OO-Programme. Wenn Sie eine statische Datei deklarieren möchten, liegt in der Regel ein Problem mit dem Anwendungsdesign vor.

Schließlich gibt es etwas falsch mit Ihrem Design ist, wenn Sie eine Liste wie folgt drucken müssen:

dll.printlistF(dll.head); 

In einem guten API-Design, das head Feld wäre ein interne sein Implementierungsdetail, und es sollte versteckt werden; d. h. als private deklariert. Und statt dll.head als Parameter geben, sollte die Druckmethode die head des Zielobjekts verwenden; d.h. this.head.

+0

Rechts. Können Sie mir mitteilen, wie Sie den PrintWriter-Parameter zu meiner printlistF hinzufügen? –

+0

Ähm ... was? Sie wissen bereits, wie Sie Parameter deklarieren. Sie haben es in der Deklaration 'main' und mindestens 4 Mal in Ihrer DoubleNode-Klasse getan. –

+0

' Diese Codezeile. Ich kann es nicht schaffen, this.head anstelle von Node head zu verwenden, und ich bin nicht sicher, was das Problem ist. Mein Vokabular ist begrenzt, daher hilft das Suchen nicht viel. –

Verwandte Themen