2016-10-19 4 views
0

Ich versuche eine Datei zu lesen (in diesem Fall eine Textdatei mit Songtexten) und eine verknüpfte Liste zu erstellen, die nur eindeutige Zeichenfolgen aus dieser Datei verwendet. Es kann keine zwei gleichen Strings in der Liste geben. Es muss in einer verknüpften Liste gespeichert werden und kann nicht die integrierte dafür verwenden. Gerade jetzt ist es das, was ich habe:Java Linked List eindeutiges Keyword Sortierung

public String createSuperList(String newKey) { 
    SuperLink newSuperLink = new SuperLink(newKey); 
    SuperLink current = first; 
    if(isEmpty()) { 
     incertLast(newKey); 
    } else if (newSuperLink != last) { 
     while(current != newSuperLink && current != null){ 
      if(current.equals(newSuperLink)){ 
       return null; 
      } else { 
       incertLast(newKey); 
      } 
      current = current.next; 
     } 
    } else { 
     return null; 
    } 
    return newKey; 
} 

HOW THE NEWKEY IS SENT TO THIS METHOD: 

    File file = new File("MYFILEPATH"); 
    try { 
     Scanner sc = new Scanner(new FileInputStream(file)); 
     while (sc.hasNextLine()) { 
      content = sc.next(); 
      if(SuperList.createSuperList(content) == null){ 
       BabyList.incertLast(content); 
      } 
     } 
     sc.close(); 
    } catch (FileNotFoundException fnf) { 
     fnf.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.out.println("\nProgram terminated Safely..."); 
    } 

Die newKey ist die Zeichenfolge, die ich mit dem Rest der verknüpften Liste bin zu vergleichen, um zu sehen, ob es in der Liste überall wiederholt wird, und wenn es in der zu sehen ist Liste irgendwo, es wird eine null zurückgeben.

Mein Problem ist jetzt, dass es einfach weiter geht und es gibt kein Anhalten (Ausreißer), es endet überhaupt nicht. Das Programm hört nicht auf. Ich schleife für immer. Ich ließ es eine Stunde lang laufen, ohne dass sich etwas änderte und es lief immer noch.

Im Moment ist es die Aufgabe, eine LinkedList namens superLinkList zu erstellen, die nur einzelne Wörter enthält.

Dies ist wird ein markov Textgenerator sein, die 2 verknüpfte Listen verwendet.

EDIT_1: Also habe ich das Infanite-Laufzeitproblem behoben, aber es überprüft immer noch nicht, ob es einzigartig ist oder nicht.

Aktualisiert Code:

public Boolean createSuperList(String newKey) { 
    SuperLink newSuperLink = new SuperLink(newKey); 
    SuperLink current = first; 
    boolean i; 
    if(isEmpty()){ 
     incertLast(newSuperLink.toString()); 
    }  
    while(current != newSuperLink && current != null){ 
     if(current.equals(newSuperLink)){ 
      System.out.println("Not unique Item"); 
      i = false; 
     } else { 
      System.out.println("Unique Item"); 
      i = true; 
     } 
     current = current.next; 
    } 

    if(i = true){ 
     return true; 
    }else{ 
     return false; 
    } 

} 

EDIT_2:

Okay, es ist so jetzt ein Nullpointer. Die NPE befindet sich in der while-Schleife. Insbesondere sein current.keyWord. Ich bin nicht sicher, wie man das ändert, damit es funktioniert. Ich bin nicht sicher, warum seine werfen einen Fehler hier ....

Code:

public Boolean createSuperList(String newKey) { 
    SuperLink newSuperLink2 = new SuperLink(newKey); 
    SuperLink current = first; 
    boolean i = false; 
    if (isEmpty()) { 
     incertLast(newKey); 
    } 
    while (!current.keyWord.equals(newSuperLink2.keyWord) && current != null) { 
     if (current.keyWord.equals(newSuperLink2.keyWord)) { 
      System.out.println("Not unique Item"); 
      i = false; 
      break; 
     } else { 
      System.out.println("Unique Item"); 
      i = true; 
     } 
     current = current.next; 
    } 
    if (i = true) { 
     return i; 
    } else { 
     return i; 
    } 

} 
+2

Dieser Code-Schnipsel wieder nicht Verbünde dein Problem. Erwäge das Erstellen eines [MCVE] (https://stackoverflow.com/help/mcve), um zu zeigen, was genau passiert. P.S. Sie sollten nicht [Zeichenfolgen mit '=='] vergleichen (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

+0

Ich bearbeitet die Frage, um es ein bisschen zu machen leichter zu lesen und hoffentlich spezifischer. –

+0

Ihre Duplikat- und Einfügelogik scheint wirklich seltsam und völlig fehlerhaft zu sein. Haben Sie versucht, es mit einem einfachen Instanzproblem zu debuggen, um zu sehen, wo es eine Schleife macht? –

Antwort

0

Sie Ihr Problem in ein paar Zeilen lösen:

  • gelesenen Werte in einem LinkedHashSet (Set Konservieren die Reihenfolge der Insertion)
  • das Ergebnis umwandeln new LinkedList<>(linkedHashSet)