我真的不知道怎么解释这个,但我们走了。
我正在测试一些我必须制作的更大程序的东西。在程序中,我必须验证来自用户的输入,以查看它是否被接受为有效答案。
我有代码,如果输入无效,它会说出来但如果我试图输入另一个字母,代码会因此错误而崩溃:
Enter a letter:
f
Your answer is not valid.
A
Enter a letter:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:695)
at example.main(example.java:18)
以下是代码:
import java.util.Scanner;
public class example
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
boolean UserInput;
do
{
char user_answer = 0;
System.out.println("Enter a letter:");
user_answer=input.nextLine().charAt(0);
if ( user_answer == 'A')
{
UserInput = true;
}
else if (user_answer == 'B')
{
UserInput = true;
}
else if (user_answer == 'C')
{
UserInput = true;
}
else if (user_answer == 'D')
{
UserInput = true;
}
else
{
System.out.println("Your answer is not valid.");
UserInput = false;
input.next();
}
}
while (!UserInput);
}
}
答案 0 :(得分:0)
删除input.next();
,它会正常工作。原因是当您使用input.next()
时,它会读取用户键入的下一个字符,而不会退出该行。然后当input.nextLine()
执行时,它会读取同一行,但会在数字后面读取。由于数字后面没有任何内容,因此它不会读取任何内容,而charAt(0);
会超出范围。
答案 1 :(得分:0)
删除input.next()
或将其更改为input.nextLine()
发生的事情是input.next()
将捕获您输入的A
。然后你回到do
的开头并重新开始,然后input.nextLine()
但你已经按enter
输入A
而A
是由input.next()
消耗。
答案 2 :(得分:0)
import java.util.Scanner;
public class Example
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
boolean UserInput;
do
{
char user_answer = 0;
System.out.println("Enter a letter:");
// user_answer=input.nextLine().charAt(0);
user_answer=input.next().charAt(0);
if ( user_answer == 'A')
{
UserInput = true;
}
else if (user_answer == 'B')
{
UserInput = true;
}
else if (user_answer == 'C')
{
UserInput = true;
}
else if (user_answer == 'D')
{
UserInput = true;
}
else
{
System.out.println("Your answer is not valid.");
UserInput = false;
// input.next();
}
}
while(!UserInput);
}
}