我只是用我的一个小程序进行娱乐编码,我发现我可以通过输入多个值并在它们之间放置一个空格来有效地跳过我的验证。例如,我的代码片段如下:
while(counter == 0) {
try{
int choice = input.nextInt();
System.out.println("Good job");
++counter;
} catch(InputMismatchException Exception) {
System.out.println("You did something wrong");
input.next();
}
}
当它要求用户输入时,我可以输入“h 4”并接受它,确定它会说“你做错了什么”但它也会显示“好工作”。如果用户要做这样的事情,我需要做些什么才能让我的代码考虑整条线并显示“你做错了什么”。
我一直在制定我的计划,因为用户只会输入一条信息,例如“你好”或“4”。我没有考虑到他们可以直到现在才进入“你好4”,而我的程序现在因为它而受到了一些影响。
答案 0 :(得分:0)
在给出错误输入后,您必须使用nextLine
来读取整行。
所以替换这个:
input.next();
在你的catch块中有这个:
input.nextLine();
说明:
当您输入" h 4"时,input.next();
会读取" h"并保留" 4",这是一个很好的值,因为可解析为int,而int choice = input.nextInt();
在循环再次启动时读取此值。相反,当您使用readLine
时,它将读取完全错误的输入" h 4"显示消息后,再次循环并等待直到给出新值。
答案 1 :(得分:0)
如果我理解您的问题,您需要检查输入字符串中是否有空格字符。输入一条信息意味着我认为任何分开的单词。所以为了做到这一点,你可以做到:
String s = input.nextLine();
if(containsWhiteSpace(s)){
System.out.println("You did something wrong");
}else{
System.out.println("Good job");
}
containsWhiteSpace函数实现是:
public static boolean containsWhiteSpace(final String testCode){
if(testCode != null){
for(int i = 0; i < testCode.length(); i++){
if(Character.isWhitespace(testCode.charAt(i))){
return true;
}
}
}
return false;
}