【问题标题】:else statements won't execute in an if else statementelse 语句不会在 if else 语句中执行
【发布时间】:2017-02-16 08:28:49
【问题描述】:

出于某种原因,无论我做什么,每次我在 Java 程序中创建 if else 语句时,它要么只执行 if 语句,要么同时执行 if 和 else 语句。

import java.util.Scanner;

public class Week06_NelsonPimentel_Assignment {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] validnum;
        int i = 0;
        validnum = new int[5];

        System.out.println("Please enter a number between 50 and 100");

        while (i < validnum.length) {
            validnum[i] = input.nextInt();

            if (validnum[i] <= 101 || validnum[i] >= 49) {
                System.out.println("yes");
                i++;
            } else {
                System.out.println("no");
            }
        }

    }

}

【问题讨论】:

  • 如果它看起来像一个奇怪的过程,因为这是一个更大程序的一小部分,但现在 if else 语句根本无法正常工作
  • validnum[i] &lt;= 101 || validnum[i] &gt;= 49 总是正确的
  • 你的意思是&amp;&amp;,而不是||。但请注意,您的逻辑与您的信息不符。

标签: java if-statement


【解决方案1】:

if (validnum[i] &lt;= 101 || validnum[i] &gt;= 49) { 将始终计算为 true,因此将打印“yes”并增加 i,当然除非 i 超出数组的范围。

|| 替换为&amp;&amp;

还可以考虑编写int[] validnum = new int[5]; 而不是两个单独的步骤。这样,validnum 永远不会处于未初始化状态,这往往会导致程序更稳定。

【讨论】:

  • "这样,validnum 永远不会处于未初始化状态" 确定赋值?
  • 起初它没有用,但现在它实际上运行得很好,谢谢大家的快速响应,因为这已经把我撕裂了 3 个小时!
  • @AndyTurner:使用初学者会理解的术语很棘手(或者至少我觉得很棘手)。你有更好的主意吗?
  • @Bathsheba 我只是不会把它作为一个理由。当然,这样做是因为它更简洁和惯用,只是不安全。 (如果它已初始化为null,也请提及)。
  • 也许我只是一只在 C 和 C++ 的白垩纪世界中奄奄一息的恐龙。
【解决方案2】:

您的代码中有一个无限循环,当validnum[i] 不满足您的条件时,您不会提高循环索引。 将i++;if 中取出或将while 循环替换为(注意: 如果您使用for 循环,则不需要i++;):

for (int i = 0; i < validnum.length; i++) {
        validnum[i] = input.nextInt();

        if (validnum[i] <= 101 || validnum[i] >= 49) {
            System.out.println("yes");
        } else {
            System.out.println("no");
        }
}

为什么要使用数组?在您发布的代码中,它看起来像浪费内存。

【讨论】:

    【解决方案3】:

    根据您的业务逻辑,if 语句将始终返回 true。

    我的观察: 请输入一个介于 50 到 100 之间的数字。

    validnum[i] = input.nextInt();
    if (validnum[i] <= 101 || validnum[i] >= 49) {
    }
    

    无论您输入的数字介于 50 到 100 之间还是小于 50 或大于 100,if 语句都将始终满足以下任一条件

    validnum[i] <= 101 
    validnum[i] >= 49
    

    【讨论】: