Java 循环作用域的嵌套
我一直试图解决一个编程问题,但遇到了一个范围问题。以下是问题的SCE:Java 循环作用域的嵌套,java,Java,我一直试图解决一个编程问题,但遇到了一个范围问题。以下是问题的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 (in
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");
}
}
}
for(int Hole1=1;Hole1
我的问题是examplelist3会更改循环的hole3每次迭代的值,但根据我的理解,每个循环
都会在继续之前完成其迭代。有人知道发生了什么吗
EDIT*删除SCE并发布代码,而不是问题中的代码,所有变量-列表
,startlist
,示例列表2
和示例列表3
-都指向同一列表对象。这意味着,如果您对这些变量中的任何一个进行任何更改,所有其他变量都将显示更新的列表,因为它们都引用相同的对象
因此,即使代码在第三个for
循环中更新列表
,更改也会反映在示例列表3
中,因为这两个变量都指向堆中的同一对象
检查一下这个问题
根据我的理解,每个for循环在继续之前都完成了它的迭代
没错
您的代码中发生了什么?(hole2)
的迭代正在完成,这意味着在每次迭代中将执行(hole3)
的,因为它在(hole2)
的范围内
(hole2)的每次迭代将始终是以下代码:
list = examplelist2;
//sorting list
examplelist3 = list;
for(hole3){
list = examplelist3;
//sorting list
//check if matching
}
每次迭代(hole3)意味着什么。也许您可以添加您想要实现的内容?似乎您正在以某种笨拙的方式执行一些嵌套的迭代/分配。
每个for循环都会在继续之前完成迭代。
这就是实际发生的情况。好吧,这是一个我无法解决的竞争问题。你从一个5 4 3 2 1的列表开始,将它们穿过3个深度在1和n-1之间的“孔”。然后在一定的条件下匹配它们,得到孔的深度。