Java 嵌套数组引用
我目前正在在线学习Java,对以下代码和数组中的一个元素的计算结果感到困惑:Java 嵌套数组引用,java,arrays,Java,Arrays,我目前正在在线学习Java,对以下代码和数组中的一个元素的计算结果感到困惑: int[]a=新的int[]{9,8,3,1,5,4}; for(int i=0;i
int[]a=新的int[]{9,8,3,1,5,4};
for(int i=0;i
我正在查看a[3]
和它的计算结果,当我调试代码时,我的IDE显示a[a[I]
的计算结果是9
,这让我有点困惑
我原以为
a[3]
等于1
,然后a[1]
等于8
,但事实似乎并非如此。由于JetBrains Academy课程没有提到这一点,任何人都可以提供清晰的说明。注意第一个条件-如果(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
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]];
}
我以为a[3]
等于1
这是正确的,在步骤3
,a[3]=1
然后a[1]
将等于8
这是不正确的,因为在步骤1
中,它被增加到9
其OK值。
查看您正在执行的操作的最佳方法是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]);
}
int[]a=新的int[]{9,8,3,1,5,4};
for(int i=0;i
你会看得更清楚。有时候最好自己面对现实,因为一个最佳实践就是了解你。祝你好运!我刚刚复制并粘贴了上面的代码,我的IDE将a[3]评估为等于10,它正在评估a[a[3]]等于9?@Lorcan谢谢。我误读了第一个条件。出于某种原因,我的头将
a[I]%2==0
翻译为I%2==0
,这使我认为该条件不会修改a[1]
。现已修复。抱歉,我当时看着数组,好像它在循环时没有被更新一样!谢谢!看到这一点的最好方法是拿出笔和纸,然后按照逻辑进行操作。请记住,有时,未来的索引会指向已更改的值。因此请始终参考数组的当前状态。谢谢小贴士,我确实喜欢在纸上工作,所以将来遇到困难时,我会尝试一下。
// a = {9, 9, 4, 10, 9, 5};
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]);
}