2016-08-06 3 views
1

Ich habe einige Probleme mit einer for-Schleife, die nicht zu stoppen scheint. Wenn ichPutGenerator zum ersten Mal mit nur einem Element in der benutzerdefinierten Listeaufrufe, funktioniert es perfekt. Wenn ich es wieder mit 9 Elementen starte, läuft es einfach weiter. Könnten Sie mir bitte in die richtige Richtung zeigen?für Schleife mit mehreren Eingängen nicht zu stoppen

edit: Ich kann den Test zum zweiten Mal ausführen, aber nichts danach.

input: 
1 
5 
3 
3 2 4 
1 5 2 
3 6 4 
1 
6 
2 
5 6 
6 7 

Code:

public static void outputGenerator (CustomList [] list, PrintWriter printWriter) { 
    int size2; 
    int valueToPrint; 
    CustomList listToBuild; 
    int length; 
    length = list.length; 
    System.out.println("len: " + length); 

    //print out the results to a .txt file 
    try { 

    printWriter.println("Matrix read: "); 
    printWriter.println(); 
    printWriter.println("------------------" + 
      "---------------------"); 
    printWriter.println(); 
    printWriter.flush(); 

    for (int x = 0; x < length; x++){ 
     System.out.println("test"); 
     listToBuild = list[x]; 
     size2 = listToBuild.sizeOfList(); 
     System.out.println("size2 " + size2); 

     for (int y = 0; y < size2; y++) { 
      System.out.println("y: " + y); 
      valueToPrint = listToBuild.ValueOfNode(y); 
      printWriter.println(valueToPrint); 
      System.out.println("val" + valueToPrint); 
      printWriter.flush(); 

     } 
     printWriter.println(); 
    } 
    return; 
    }catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 

Individuelle verlinkte Liste Code:

public class CustomList { 

private Node firstNode; 
private Node end; 
private Node header; 
private int sizeOfMatrix; 
private int sizeOfList; 




//constructor to set all to blank 
public CustomList() { 
    firstNode = null; 
    end = null; 
    header = null; 
    sizeOfMatrix = 0; 
    sizeOfList = 0; 

} 

public void addToList(int dataToSave) { 

    Node node = new Node (dataToSave); 

    if (firstNode == null) { 
    firstNode = node; 
    firstNode.next = end; 
    firstNode.before = header; 
    } 

    else if (end == null) { 
    end = node; 
    end.before = firstNode; 
    firstNode.next = end; 

    } 

    else 
    end.next = node; 
    node.before = end; 
    end = node; 

    sizeOfMatrix++; 
} 

public void setHeader (int dataToUse){ 

    Node headerNode = new Node(dataToUse); 
    header = headerNode; 
    header.next = firstNode; 
} 

public void print() { 
    Node zNode = firstNode; 
    System.out.println("Test"); 
    if(firstNode == null){ 
    System.out.print("EMPTY"); 
    return; 
    } 

    while (zNode != null) { 
    System.out.println(zNode); 
    zNode = zNode.next; 
    } 
} 




public int sizeOfList() { 

    Node zNode = firstNode; 
    sizeOfList = 0; 

    while(zNode != null) { 

    zNode = firstNode.next; 
    sizeOfList++; 
    } 
    return sizeOfList; 
} 



public int ValueOfNode(int column) { 
    int counter = 0; 
    Node zNode = firstNode; 

    while (zNode != null) { 

    if (column == counter){ 
     return zNode.numInMatrix(); 
    } 

    else 
     zNode = firstNode.next; 
     counter++; 
    } 

    return -1; 
} 
+0

Was bedeutet size2 = listToBuild.sizeOfList(); machen ? – FallAndLearn

+0

@FallAndLearn höchstwahrscheinlich die Größe von listToBuild. weil er es als seine Bedingung in der inneren Schleife benutzt. – Abhishek

+0

ich muss eine benutzerdefinierte Linkedlist-Klasse erstellen und verwenden, um Matrizen auszudrucken – cfsprod

Antwort

1

Wenn Sie tun

size2 = listToBuild.sizeOfList(); 

sizeOfList() den gleichen Wert für jeden immer wieder zurückkehren Anruf.

Ich denke, Sie ändern nicht den Wert von FirstNode. Außerdem habe ich einige Änderungen in Ihrer Funktion vorgenommen.

public int sizeOfList() { 

    Node zNode = firstNode; 
    sizeOfList = 0; 

    while(zNode != null) { 
    zNode = zNode.next; 
    sizeOfList++; 
    } 
    return sizeOfList; 
} 
+0

das funktioniert perfekt danke – cfsprod

Verwandte Themen