无论我尝试什么,我在方法内部的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()][]);
}
以下是一些示例输出(我现在从终端输入矩阵的值):
答案 0 :(得分:1)
方法private int [] getNextPositions()始终返回对同一数组的引用:
int[] tempArray = positions;
这似乎是问题的根源。