我正在尝试使用try
和catch
。如果输入的输入无效,则循环应重复并再次询问用户输入,但它不起作用。当我输入错误时,只需重复System.out.println
。
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 x = 1;
int month, day, year;
do {
try {
System.out.println("Please enter a month MM: ");
month = scan.nextInt();
if(month>12 && month<1)
{
System.out.println("FLOP");
}
x=2;
}
catch(Exception e){
System.out.println("not today mate");
}
}
while(x==1);
}
}
答案 0 :(得分:0)
作为一般规则,异常用于特殊情况,而不是用于驱动程序的逻辑。在这种情况下,验证输入的数据不是特殊情况。这是一种正常的事态,用户可能会输入错误并输入错误的数字。将输入放在一个循环中并重复,直到输入正确的值(可能有一个用户取消的选项)。
答案 1 :(得分:0)
首先你的情况是错误的。
你有:
if(month>12 && month<1)
{
System.out.println("FLOP");
}
所以月份不能大于12,同时小于1。
我认为你想把OR代替AND,例如
if(month > 12 || month < 1)
{
System.out.println("FLOP");
}
对于异常,当用户输入非数字值或输入是exausted时可能会发生。 抛出: InputMismatchException - 如果下一个标记与Integer正则表达式不匹配,或者超出范围 NoSuchElementException - 如果输入用尽 IllegalStateException - 如果此扫描程序已关闭
答案 2 :(得分:0)
这是解决问题的有效方法
public static void userInput(){
Scanner scan = new Scanner(System.in);
int x = 1;
int month, day, year;
System.out.println("Please enter a month MM: ");
month = scan.nextInt();
boolean i = true;
while(i == true)
{
if(month < 12 && month > 1)
{
System.out.println("FLOP");
i = false;
}
else if(month >= 12 || month <= 1)
{
System.out.println("not today mate");
month = scan.nextInt();
}
}
}