使用try和catch String输入

时间:2013-03-23 00:20:36

标签: java

我正在做的是要求用户输入一个月。我已经输入ifelse if来说明月份> 12或月< 1 并重新要求用户输入一个月。我试图使用try和catch语句来捕获用户输入字符串并告诉他们输入一个月。我的代码的问题是,当它捕获用户输入字符串时,命令行不断重复"请输入1-12和#34;并让用户重新输入月份。任何人都可以解决我遇到问题的问题。

我已尝试将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: ");

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果用户输入超出指定范围的月份(例如23),请观看发生的情况:

  1. if - 语句评估为false并转到else块。
  2. 打印一条消息,然后用户再次输入文本。
  3. 循环再次开始,用户再次输入文字。
  4. 因此,您的文本未被检查。尝试删除该行

    month = scan.nextInt();
    

    调用后打印错误信息。