3 回答
TA贡献1995条经验 获得超2个赞
注意第一个条件 -if (a[i] % 2 == 0) {a[i] += 1;}
这会导致偶数值增加。因此a[1]
从8
增加到9
。
现在,当i==3
,a[a[i]]
被评估为a[1]
等于 时9
。然后将其添加到 的原始值a[3]
(注意运算符是+=
,而不是=
),因此a[3]
变为1 + 9
,即10
。
TA贡献1998条经验 获得超6个赞
int[] a = new int[] {9, 8, 3, 1, 5, 4};
for (int i = 0; i < a.length; i++){
if (a[i] % 2 == 0)
a[i] += 1;
else if(a[i] < a.length)
a[i] += a[a[i]];
}
|i | a[i] old | a[i] % 2 | a[i] < a.length | a[a[i]] | a[i] new |
|--|----------|----------|-----------------|---------|----------|
|0 | 9 | - | - | NaN | 9 |
|1 | 8 | + | - | NaN | 9 |
|2 | 3 | - | + | 1 | 4 |
|3 | 1 | - | + | 9 | 10 |
|4 | 5 | - | + | 4 | 9 |
|5 | 4 | + | - | 9 | 5 |
// a = {9, 9, 4, 10, 9, 5};
我以为这a[3]等于1
这是正确的,在步骤3,a[3] = 1
然后就a[1]等于8
这是不正确的,因为在步骤中1它被增加到9
TA贡献1797条经验 获得超4个赞
没关系。查看您正在做什么的最佳方法是debuggin(在本例中绘制)您的代码:
int[] a = new int[] {9, 8, 3, 1, 5, 4};
for (int i = 0; i < a.length; i++){
if (a[i] % 2 == 0){
System.out.printf(a[i]);
a[i] += 1;
System.out.printf(a[i]);
}else if(a[i] < a.length){
System.out.printf(a[i]);
a[i] += a[a[i]];
System.out.printf(a[i]);
}
你会看得更清楚。有时,我们自己面对墙壁会更好,因为最好的做法之一就是了解你。祝你好运!。
添加回答
举报