【问题标题】:User input never enters if statement用户输入从不进入 if 语句
【发布时间】:2020-11-28 17:39:22
【问题描述】:

程序的重点是让用户无休止地输入一定数量的整数(直到他们输入的不是整数),并且对于用户输入的每个整数,它应该检查整数是大于还是小于输入的值。

问题:当程序运行时,一切都很好,直到到达

number = scanner.nextInt();

此时,用户输入了他们的整数,但从未将其放入以下 ​​if 语句中。我希望得到提示而不是答案,但我会尽我所能。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        do {
            System.out.println("Enter number: ");
            int number = 0;
            int minNumber = 0;
            int maxNumber = 0;
            boolean hasInt = scanner.hasNextInt();
            if (hasInt) {
                number = scanner.nextInt();
                if (maxNumber < number) {
                    maxNumber = number;
                }
                if (minNumber > number) {
                    minNumber = number;
                }
            } else {
                System.out.println("Your minimum number: " + number);
                System.out.println("Your maximum number: " + maxNumber);
                break;
            }
        } while (true);

        scanner.close();
    }
}

【问题讨论】:

  • 您是否使用调试器来了解发生了什么?
  • 是什么让您认为它没有进入if 语句?发生了什么?尝试使用调试器或添加打印输出来检查您的假设。
  • 我在整个代码中输入打印语句作为“检查点”,以查看它到达的位置,据我所知,这就是问题开始的地方。
  • 输入是什么样的?
  • 输入一次输入一个,50 , 75 , a (此处有意中断)

标签: java if-statement input integer


【解决方案1】:

您的 minNumbermaxNumber 声明应该在循环之外。此外,您需要初始化以下值,以便仅与输入的值进行正确的最小值和最大值比较:

int minNumber = Integer.MAX_VALUE;
int maxNumber = Integer.MIN_VALUE;

在打印语句而不是minNumber 中,您正在打印number

【讨论】:

  • 这是正确的,但我建议让 OP 自己弄清楚,以便他们学得更好。
  • 我的程序仍然有问题,但这让我走上了正确的道路,谢谢!
【解决方案2】:

它没有到达 if 语句,因为如果它到达了,用户输入将更新为我认为输入的值。它没有。它输出最初声明的值。

您没有得到正确的输出,并且您假设原因是代码未输入 if 语句。按照科学的方法,下一步是检验你的假设。

如果您将打印输出放在if 语句中,您会看到它们确实在运行。不是这个。错误一定在别处。您应该收集更多证据并提出新假设。

提示:尝试在每次迭代的开始结束时打印出变量的值。我已经标记了下面的地方。他们是你期望他们成为的样子吗?你会看到一个异常现象,应该指出你正确的方向。

do {
    System.out.println("Enter number: ");
    int number = 0;
    int minNumber = 0;
    int maxNumber = 0;

    // Print number, minNumber, and maxNumber.

    boolean hasInt = scanner.hasNextInt();
    if (hasInt) {
        number = scanner.nextInt();
        if (maxNumber < number) {
            maxNumber = number;
        }
        if (minNumber > number) {
            minNumber = number;
        }
    } else {
        System.out.println("Your minimum number: " + number);
        System.out.println("Your maximum number: " + maxNumber);
        break;
    }

    // Print number, minNumber, and maxNumber.
} while (true);

【讨论】:

  • 我希望我先看到这个,谢谢你的调试提示。我曾假设程序从未输入 if 语句,因为变量从未更新。我应该调试得更彻底。
  • 或者只是使用一个实际的调试器,并在 1 分钟内逐步完成代码。无需打印语句,无需头痛,无需花时间在 stackoverflow 上写问题。
  • 你说得对,唐,我不知道调试器是一种工具,只是一个概念。我一直在通过 Udemy 学习,我注册的课程还没有提到。我将来会使用它。谢谢。
猜你喜欢
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2019-06-18
  • 1970-01-01
相关资源
最近更新 更多