2016-08-06 3 views
1

У меня возникают проблемы с циклом for, который, как представляется, не останавливается. Когда я вызываю outPutGenerator в первый раз, когда только один элемент в пользовательском списке работает отлично. Когда я запустил его снова с 9 элементами, он просто продолжает работать. Не могли бы вы указать мне в правильном направлении?для цикла с несколькими входами, не останавливающимися

Редактировать: Я могу получить тест, чтобы запустить второй раз, но ничего после этого.

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

Код:

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(); 
    } 
} 

Пользовательские Связанный список Код:

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

Что делает size2 = listToBuild.sizeOfList(); делать ? – FallAndLearn

+0

@FallAndLearn, скорее всего, размер listToBuild. потому что он использует его как свое условие во внутреннем цикле. – Abhishek

+0

Мне нужно создать собственный класс связанных списков и использовать его для печати матриц – cfsprod

ответ

1

Когда вы делаете

size2 = listToBuild.sizeOfList(); 

sizeOfList() всегда будет возвращать одинаковое значение для каждого вызов.

Я думаю, вы не меняете значение firstNode. Кроме того, есть некоторые изменения, которые я внес в вашу функцию.

public int sizeOfList() { 

    Node zNode = firstNode; 
    sizeOfList = 0; 

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

это отлично работает спасибо – cfsprod

Смежные вопросы