我无法弄清楚为什么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]
答案 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}}。这是你计划的吗?