for循环使用with数组访问java中数组元素的逻辑

Logic of for loop using with array to access elements of the array in java

我的代码使用 for 循环访问数组元素。程序的输出是 [19,17,15],它们是数组 int a[] = { 12, 15, 16, 17, 19, 23 } 的元素。写入以下代码后的输出:

public class Tester {
    public static void main(String s[]) {
        int a[] = { 12, 15, 16, 17, 19, 23 };
        for (int i = a.length - 1; i > 0; i--) {
            if (i % 3 != 0) {
                --i;
            }
            System.out.println(a[i]);
        }
    }
}

算法:

  1. 迭代 1:i=5 所以 a[5]=23。 “if 语句”为真并 --i 执行。所以 i=4。因此,a[4]=19 将打印为输出中的第一个元素。

  2. 迭代 2:i=3 所以 a[3]=17。 “if 语句”再次变为 true 并且 --i 应该执行但是它跳过了那个条件,因为我尝试使用调试工具来查看它是如何工作的。输出是 a[3]=17 我认为这是错误的。

你能帮我理解为什么输出 17 吗?在我看来,它应该跳过那部分。

在迭代 2 中,i=3 条件为假,因为 3 % 3 = 0

这是一步一步的解释。 (i % 3 != 0) 检查是否 i is not divisible by 3。另请注意,在这种情况下,您的 post 和 i 的 pre-decrements 不相关,因为无论它们如何递减,结果都是相同的。

 i = 5;
 i not divisible by 3 so i-- = 4
 print a[4] = 19
 i-- at end of loop = 3
 i is divisible by 3 so i remains 3
 print a[3] = 17
 i-- at end of loop = 2
 i not divisible by 3 so i-- = 1
 print a[1] = 15
 i-- = 0 so loop terminates.