有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么循环之前索引会增加

在我想要它之前/在它执行整个for循环块之前,我无法理解为什么for循环计数器会增加。我已经在代码中添加了用于调试的打印语句,下面是代码:

public void findSubSeq() {
    temp = new ArrayList<Integer>();
    temp.add(vals.get(0));
    for (int i = 0; i < (vals.size()-2); i++) {
        System.out.println(i + " index in array, for");
        if (vals.get(i) < vals.get(i++)) {
            System.out.println(i + " index in array, if 1");
            temp.add(vals.get(i++));
            System.out.println(i + " index in array, if 2");
            System.out.println(this.getlargest());
        }
        else {
            System.out.println(i + " index in array, else 1");
            compareALs();
            System.out.println(i + " index in array, else 2");
            temp.add(vals.get(i++));
            System.out.println(i + " index in array, else 3");
            System.out.println(this.getlargest());
        }
    }
}

在代码运行过程中,我们可以看到计数器i在for循环结束之前增加。我真的很困惑。我还尝试了一个for-each循环,得到了类似的结果。 以下是跑步记录: 子阵列创建之前

在菲拉尔之前

输入文件:inp

[1,2,3,0,4,5]

在找到subseq之前

数组中的0索引,用于

数组中有1个索引,否则为1

数组中有1个索引,否则为2

数组中的索引为2,否则为3

[1]

3数组中的索引,用于

4数组中的索引,否则为1

4数组中的索引,否则为2

数组中的索引为5,否则为3

[1]


共 (3) 个答案

  1. # 1 楼答案

    if (vals.get(i) < vals.get(i++))
    

    语句类似于x < x,因为增量在get调用之后累积

    使用

    if (vals.get(i) < vals.get(++i))
    

    如果要比较第i个元素和第i+1个元素

    第二个:在一个循环中,有3个增量i,在一个案例中是i。一个在{}循环中,第二个在{}循环中,第三个在{}循环中。这是你计划的吗

  2. # 2 楼答案

    您有vals.get(i++),它增加了i。以这种方式使用时,++是一个后增量运算符

  3. # 3 楼答案

    您确实需要避免在循环中使用i++。这就是导致索引变量在您不期望的情况下递增的原因。例如,您的代码执行以下操作:

    if (vals.get(i) < vals.get(i++))
    

    我想你真的想这么做:

    if (vals.get(i) < vals.get(i+1))
    

    类似地,当您添加到temp时,您确实不想使用i++,您需要:

    temp.add(vals.get(i+1));