【问题标题】:If statement does not work as intended in javaIf 语句在 Java 中没有按预期工作
【发布时间】:2022-11-26 00:56:31
【问题描述】:

我正在尝试创建一种方法,该方法基本上从对象数组中获取 int 值并检查哪个对象更接近特定值。我在使用大量if statements 时完成了此操作,到目前为止该方法没有打印结果。

在尝试使其正常工作时,我已经编写了如下所示的代码。

public void teamlengthaverage(int N) {
    for (int i = 0; i < N; i++) {
        if (teams[i].getScore() <= mesoScore(N)) {
            for (int j = 0; j != i && j < N; j++) {
                if (teams[i].getScore() > teams[j].getScore()) {
                    System.out.print(
                            "The team closest to the average score is: "
                                    + teams[i]);
                }
            }
        } else if (teams[i].getScore() >= mesoScore(N)) {
            for (int j = 0; j != i && j < N; j++) {
                if (teams[i].getScore() < teams[j].getScore()) {
                    System.out.print(
                            "The team closest to the average score is: "
                                    + teams[i]);

                    /*
                     * the program checks if a value above or below the
                     * value of mesoScore is closer to it while also
                     * different to other values in the array as well
                     */
                }
            }
        }
    }
}

IDE 没有向我显示任何错误。甚至没有代码警告,所以我找不到具体的问题。如果有人知道这有什么问题,请发表评论或回答。

【问题讨论】:

  • 作为基本的调试步骤,在每个条件检查之前放置 println 语句,输出所有引用变量的值以及条件的结果。您会很快发现哪些值不是您认为应该的值,这将导致问题。 (或者学习使用调试器,两种方式都可以。)
  • 如果您在循环中执行 j&lt; N,您真的想与 mesoScore(N) 进行比较吗?如果您发布一个编译和运行的minimal reproducible example,它也会有所帮助。并包括任何数据和预期输出。我们不能运行没有封闭类和测试数据的单独方法。
  • “IDE 没有向我显示任何错误”那是因为你写了有效的代码,而不是将执行您想要的操作的有效代码的特定实例。编译器不能告诉你做错了什么,只能告诉你它是否编译。
  • 它还会真的如果您要求 IDE 缩进您的代码,请提供帮助。目前,有几个语句以一种非常违反直觉的方式缩进。
  • 我还强烈建议您始终对 if 块和循环块使用 {},即使该块仅包含一条语句。它有可能在未来节省大量调试时间。还可以使用 print 语句在整个程序中打印各种值,以帮助评估正在发生的事情。打印是调试的第一步。

标签: java arrays if-statement methods


【解决方案1】:

我怀疑它不是 if,而是 for 没有像您预期的那样工作:

for(int j = 0; j != i && j<N; j++)

这将在第一次迭代时立即中断,因为 j == i (== 0)。 for 循环仅在条件为真时执行:当条件为假时它立即停止。

它不会继续推测性地寻找条件可能再次为真的另一个值——一般来说,可能没有这样的值。

我怀疑你的意思是:

for(int j = 0; j<N; j++) {
  if (j == i) continue;

  // ...
}

跳过 j == i 的情况,但之后继续。

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 2017-06-18
    • 2020-10-01
    • 1970-01-01
    • 2020-07-26
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多