0

我正在做的是要求用户输入一个月。我已经输入了一个ifelse if说明月份 > 12 还是月份 < 1并重新要求用户输入月份。我试图使用 try 和 catch 语句来捕捉用户输入字符串并告诉他们输入一个月。我的代码的问题是,当它捕获用户输入字符串时,命令行会不断重复“请输入月份 1-12”并让用户重新输入月份。谁能阻止我遇到的问题。

我尝试将其month.scan.nextInt()插入,catch但我得到一个错误,我真的很困惑。

import java.util.*;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Price {
    public static void main(String[] args) {
        userInput();
    }

    public static void userInput() {
        Scanner scan = new Scanner(System.in);

        int month, day, year;
        boolean i = true;
        System.out.println("Please enter a month MM: ");
4

2 回答 2

2

发生错误是因为您的代码没有使用catch子句中的无效输入。您的程序尝试一次又一次地读取它,导致另一个异常。

如下更改代码应该可以解决问题:

catch(InputMismatchException imme) { 
    System.out.println("Please enter a month 1-12");
    scan.next(); // Ignore the invalid input
}

如果您想让您的代码对其他人更具可读性,请提出解释其用途的名称。例如,变量i用于决定是否继续读取。将其重命名为continueReading将使您的循环更易于理解:

while (continueReading) ... // You do not need "== true" after a boolean variable
于 2013-03-23T00:25:26.950 回答
0

如果用户输入的月份超出了指定范围(例如23),请注意会发生什么:

  1. -if语句计算false并转到else块。
  2. 打印一条消息,然后用户再次输入文本。
  3. 循环再次开始,用户再次输入文本。

因此,您的文本未被检查。尝试删除线

month = scan.nextInt();

调用后打印错误消息。

于 2013-03-23T00:25:29.767 回答