我想要这个代码做的是,每当他输入除String之外的东西时,抛出异常(强制用户再次输入答案)。 这是代码的一部分
Scanner sc = new Scanner(System.in);
String answer = "";
boolean invalidInput = true;
while(invalidInput){
try {
answer = sc.nextLine().toUpperCase();
invalidInput = false;
}
catch(InputMismatchException e){
System.out.println("Enter a letter please");
invalidInput = true;
}
}
现在的问题是,如果我输入一个整数,它就不会抛出任何东西。
由于
答案 0 :(得分:1)
现在的问题是,如果我输入一个整数,它就不会抛出 任何东西。
没问题,你认为它是一个整数,它实际上是字符串。
String s=1; //Gives Compilation Error
而
String s="1"; // will not give any Error/Exception and this is your case
用户将提供输入,直到达到预期输入列表,如下所示:
List<String> expectedInputs=Arrays.asList("A","B","C","D");
String input=takeInputFromUser();
if(expectedInputs.contains(input)){
//doWhatever you want to do
}else{
// throw any Exception
}
答案 1 :(得分:1)
如果数据不符合预期,只需抛出InputMismatchException
。
Scanner sc = new Scanner(System.in);
String answer = "";
boolean invalidInput = true;
while(invalidInput){
try {
answer = sc.nextLine().toUpperCase();
if (!answer.equals("A") && !answer.equals("B") && !answer.equals("C")) {
throw new InputMismatchException();
}
invalidInput = false;
} catch (InputMismatchException e) {
System.out.println("Enter a letter please");
invalidInput = true;
}
}
请注意,没有必要为此类控件抛出异常。您可以直接在if代码中处理错误消息。
答案 2 :(得分:0)
我建议您在这种情况下使用regex
try {
answer = sc.nextLine().toUpperCase();
invalidInput = !answer.matches("[ABC]");
} catch(InputMismatchException e){
System.out.println("Enter a letter please");
invalidInput = true;
}