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

时间:2014-02-04 17:56:30

标签: java for-loop arraylist

我无法弄清楚为什么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循环,结果相似。 这是运行: 在subarrayB创建之前

填充之前

输入文件:inp

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

在findSubSeq之前

数组中的

0索引,

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

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

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

[1]

数组中的3个索引,用于

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

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

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

[1]

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

你真的需要避免在循环中使用i ++。这就是导致你的索引变量在你不期望它时增加的原因。例如,您的代码执行此操作:

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

我想你真的想这样做:

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

同样,当你添加到temp时,你真的不想做i ++,你想要:

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

答案 2 :(得分:0)

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

语句与x < x类似,因为get调用后会产生增量。

使用

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

如果你想比较第i和第i + 1个元素。

第二种:在一个案例中,i在一个案例中有3个增量i for。一个位于if周期,第二个位于add,3位位于{{1}}。这是你计划的吗?