我一直在努力解决编程问题,并遇到了一个范围问题。这是问题的SCE:
for (int Hole1 = 1; Hole1 < beavers; Hole1++) {
list = exampleList;
for (int t = 0; t < Hole1; t++) {
temp.add(list.get(0));
list.remove(0);
}
for (int p = 0; p < Hole1; p++) {
list.add(temp.get(temp.size() - 1));
temp.remove(temp.size() - 1);
}
exampleList2 = list;
for (int Hole2 = 1; Hole2 < beavers; Hole2++) {
list = exampleList2;
for (int t = 0; t < Hole2; t++) {
temp.add(list.get(0));
list.remove(0);
}
for (int p = 0; p < Hole2; p++) {
list.add(temp.get(temp.size() - 1));
temp.remove(temp.size() - 1);
}
exampleList3 = list;
for (int Hole3 = 1; Hole3 < beavers; Hole3++) {
list = exampleList3;
for (int t = 0; t < Hole3; t++) {
temp.add(list.get(0));
list.remove(0);
}
for (int p = 0; p < Hole3; p++) {
list.add(temp.get(temp.size() - 1));
temp.remove(temp.size() - 1);
}
System.out.println(list.toString() + " " + Hole1 + " " + Hole2 + " " + Hole3);
if (check(list))
System.out.println("match");
}
}
}
我的问题是 examplelist3 会为 hole3 for loop
的每次迭代更改值,但根据我的理解,每个loop
都会完成它&#39 ; s继续前的迭代。任何人都知道发生了什么?
EDIT *删除了SCE并发布了代码
答案 0 :(得分:1)
根据问题中的代码,所有变量 - list
,startlist
,examplelist2
和examplelist3
- 都引用相同的列表对象。这意味着如果对这些变量中的任何变量进行任何更改,则所有其他变量将显示更新的列表,因为它们都引用相同的对象。
因此,即使代码在第3 list
循环中更新for
,更改也将反映在exampleList3
中,因为两个变量都指向堆中的同一对象。
检查this SO问题。
答案 1 :(得分:0)
从我的理解中,每个for循环在继续之前完成它的迭代。
这是真的。
您的代码中发生了什么? for(hole2)
的迭代正在完成,这意味着在每次迭代中都会执行for(hole3)
,因为它位于for(hole2)
的范围内
for(hole2)
的每次迭代都将始终是这段代码:
list = examplelist2;
//sorting list
examplelist3 = list;
for(hole3){
list = examplelist3;
//sorting list
//check if matching
}
每次迭代for(hole3)
意味着什么。