我正在做的是要求用户输入一个月。我已经输入if
和else 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: ");
答案 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
),请观看发生的情况:
if
- 语句评估为false
并转到else
块。因此,您的文本未被检查。尝试删除该行
month = scan.nextInt();
调用后打印错误信息。