我只是用我的一个小程序进行娱乐性编码,我发现我可以通过输入多个值并在它们之间放置一个空格来有效地跳过我的验证。例如,我的代码片段如下所示:
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",它就会接受它,当然它会说"你做错了什么",但它也会显示"干得好"。我需要做什么才能让我的代码考虑整行并显示"你做错了什么",如果用户要做这样的事情。
我一直在制作我的程序,考虑到用户只会输入一条信息,例如"hello"或"4"。直到刚才我才考虑到他们可以输入"hello 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");
}
包含空格函数的实现是:
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;
}