我只是通过我的一个小程序进行休闲编码,我发现通过输入多个值并在它们之间放置一个空格我可以有效地跳过我的验证。例如,我的代码片段如下:
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”而且我的程序现在因此受到了一些影响。
在给出错误输入后,您必须使用nextLine
读取整行。
所以替换这个:
input.next();
在你的catch块中有这个:
input.nextLine();
说明:
当你输入“h 4”时,input.next();
读取“h”并留下“4”,这是一个很好的值,因为可以解析为int而int choice = input.nextInt();
在循环重新开始时读取该值。相反,当您使用readLine
时,它将在显示消息后读取完全错误的输入“h 4”,再次循环并等待直到给出新值。
如果我理解您的问题,您需要检查输入字符串中是否有空格字符。输入一条信息意味着我认为任何分开的单词。所以为了做到这一点,你可以做到以下几点:
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;
}