2016-08-06 1 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

@FallAnd 아마도 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

관련 문제