在循环之外的ArrayList没有被更新

时间:2015-03-09 07:00:00

标签: java loops debugging arraylist while-loop

无论我尝试什么,我在方法内部的ArrayList<int[]>默认为相同的值。使用System.out.println(),我能够发现我的方法中的while循环对ArrayList进行了更改,但是一旦它退出循环,它总是默认使用数组[0,1,2]

以下是方法:

private int[][] computeHighestSum() {
    int totalValue = Integer.MIN_VALUE;
    ArrayList<int[]> lowestPositions = new ArrayList<int[]>(); //creates list to hold sequences
    totalValue = (int) graphTraversal(positions)[0]; //assigns default sequence's value
    lowestPositions.add(positions); //adds default sequence to the List

    Object[] x; 
    //loops through and tries other sequences
    while((x = graphTraversal())[1] != null) {
        //if the current sequence produces greater value, clear the List, and then add this sequence, and assign new value to totalValue
        if((int) x[0] > totalValue) {
            lowestPositions.clear();
            totalValue = (int) x[0];
            lowestPositions.add((int[]) x[1]);

        } else if((int) x[0] == totalValue) { 
            lowestPositions.add((int[]) x[1]);
        }
    }
    return lowestPositions.toArray(new int[lowestPositions.size()][]);
}

该方法的作用是首先遍历图形并计算总值,并将其设置为默认值totalValue。然后,它将特定的图形导航序列添加到ArrayList<int[]>,其中包含int[]中的导航序列。这将成为默认的totalValue和图表序列。

然后,它使用不同的序列遍历相同的图形,直到它用完有效序列。如果它找到的值大于当前totalValue,则会将该值分配给totalValue,并清除ArrayList,并添加新序列。如果它发现它是相同的,则将其添加到ArrayList

while循环中,它会进行更改和所有操作,但只要方法结​​束,ArrayList就会包含相同的数组。有趣的是,如果while循环找到n个相同的totalValue个数,它会将所有这些循环添加到ArrayList但是在方法结束时, n中的所有ArrayList元素都是相同的数组:[0,1,2]

即使我拿出最初添加[0,1,2]的初始lowestPositions.add(positions);,它仍然默认为结尾。始终正确计算totalValue

如果有帮助,这是我的System.out.println()调试代码:

 private int[][] computeHighestSum() {
    int totalValue = Integer.MIN_VALUE;
    ArrayList<int[]> lowestPositions = new ArrayList<int[]>();
    totalValue = (int) graphTraversal(positions)[0];
    lowestPositions.add(positions);
    System.out.println("Default Array added: " + Arrays.toString(positions));
    Object[] x;
    while((x = graphTraversal())[1] != null) {
        System.out.println(Arrays.toString((int [])x[1]));
        if((int) x[0] > totalValue) {
            lowestPositions.clear();
            totalValue = (int) x[0];
            lowestPositions.add((int[]) x[1]);
            System.out.println("An Array Greater Added: " + Arrays.toString((int[]) x[1]));
            System.out.println(Arrays.toString(lowestPositions.get(0)));
        } else if((int) x[0] == totalValue) {
            System.out.println("An Array Equal Added: " + Arrays.toString((int[]) x[1]));
            lowestPositions.add((int[]) x[1]);
        }
    }
    System.out.println(Arrays.toString(lowestPositions.get(0)));
    System.out.println(lowestPositions.size());
    System.out.println(totalValue);
    return lowestPositions.toArray(new int[lowestPositions.size()][]);
}

以下是一些示例输出(我现在从终端输入矩阵的值):

Sample output

1 个答案:

答案 0 :(得分:1)

方法private int [] getNextPositions()始终返回对同一数组的引用: int[] tempArray = positions;

这似乎是问题的根源。