Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环作用域的嵌套_Java - Fatal编程技术网

Java 循环作用域的嵌套

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

我一直试图解决一个编程问题,但遇到了一个范围问题。以下是问题的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");
            }
        }
    }
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之间的“孔”。然后在一定的条件下匹配它们,得到孔的深度。