除了使用异常的字符串之外,我怎么读除其他内容?

时间:2015-06-17 11:05:40

标签: java string exception letter

你会这么善良并帮助我吗?我正在做一个简单的问答游戏,在游戏过程中,用户被要求输入他的答案。它的A,B或C.我想用try / catch异常覆盖...

我想要这个代码做的是,每当他输入除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;
    }
}    

现在的问题是,如果我输入一个整数,它就不会抛出任何东西。

由于

3 个答案:

答案 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;
}