2016-08-06 15 views
1

停止していないforループで何らかの問題が発生しています。私がoutPutGeneratorをカスタムリスト内の1つの項目で初めて呼び出すと、完全に機能します。私は9つの項目でそれをもう一度実行すると、それはちょうど実行し続けます。あなたは正しい方向に私を指差してくれますか?複数の入力が停止していないループの場合

編集:2回目のテストを実行できますが、それ以降は実行できません。

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

関連する問題