【问题标题】:why can't my java code read the condition? [closed]为什么我的 java 代码无法读取条件? [关闭]
【发布时间】:2021-03-11 04:26:34
【问题描述】:

我要做的是在给定数组(从 0 到 n-1)时,将数组值与索引减去 3 的倍数相加,从末尾开始。 例如,当给定 7 个数组时,我想对 a[0] a[2] a[3] a[5] a[6] 求和。

下面是我编写的代码的错误部分。

        int j = 0;

        for(int i=0; i<n; i++){
                j = i*3;

                if(i!=n-j)
                        r += array[i];
        }

我的代码无法读取条件,只能对所有数组值求和。 我不知道为什么。有人可以帮我吗?

【问题讨论】:

  • 您是否尝试过使用调试器单步执行代码,以检查程序在每个时间点的状态以及您对其行为的假设?
  • 代码可以“读取条件”就好了。问题是条件永远不会为假。
  • 欢迎来到 SO。请使用tour,阅读How to Ask,并编辑您的问题以包含Minimal, Complete, and Verifiable example。另外,请检查this
  • 有人建议使用调试器,但更简单的替代方法是在 if 之前插入以下行并观察发生了什么:System.out.println("i: " + i + " j: " + j + " n: " + n + " n-j: " + (n-j) + " r: " + r); - 这些值是您所期望的成为?

标签: java arrays if-statement conditional-statements


【解决方案1】:

对于类似的任务,模运算符通常是您的朋友。 我这样尝试过,它可以工作:

    int r = 0;
    int[] array = new int[7];

    for(int i = array.length; i >= 0; i--){
        int numberOfIteration = array.length - i;
        if(numberOfIteration % 3 > 0){
            System.out.println("Add array[" + i + "]");
            r += array[i];
        }
    }

【讨论】:

    【解决方案2】:

    让我们调试吧!

    第一次循环:

    i = 0 j = i * 3苏... 0 if (0 != 7 - 0) ... - 当然不是,所以 i = 0 符合条件并被添加。

    下一个循环:

    i = 1 j = 3

    如果 (1 != 7 - 3) ... - 当然不是,所以 i = 1 符合条件并被添加。

    你不想要的。

    鉴于这是家庭作业,这应该足以让您再迈出一步并弄清楚您应该在这里做什么。我会给出一些提示:

    您也可以循环、倒数。当然,您必须使用 i--(每次将 i 减 1),并且您可以使用 int i = nint i = n - 1 作为 for 循环中的初始化表达式。

    根本无法使用i 计算整个“它是从顶部算起的第三个因素”部分,您需要为此单独计算一些东西。您可以在外部声明变量(您已经这样做了,int j = 0,但您不是在寻找 0,而是在寻找“我不想要的顶部的第一个索引”。然后您可以使用 if 检查它是否是那个索引。如果是这样,您不想将该数字添加到您的总和中并且您想更新您的j

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多