import java.util.Scanner;
public class mathstrainer {
public static void main(String[] args) {
Scanner answerinput=new Scanner(System.in);
System.out.println("Welcome to Maths Trainer!");
boolean choice=true;
int max=15;
int min=1;
while(choice=true){
int number1=(int)(Math.random()*max+min);
int number2=(int)(Math.random()*max+min);
System.out.println("what is "+number1+"+"+number2+"? >");
int answer=answerinput.nextInt();
int solution=number1+number2;
if(answer==solution){
System.out.println("Correct! Well done!");
System.out.println("Would you like another question? (Y/N)");
String choiceword=answerinput.nextLine();
choiceword=choiceword.toUpperCase();
char choiceletter=choiceword.charAt(0);
if(choiceletter=='Y'){
choice=true;
}
else{
choice=false;
}
}
else{
System.out.println("Incorrect! The right answer is "+solution);
System.out.println("Would you like another question? (Y/N)");
String choiceword=answerinput.nextLine();
choiceword=choiceword.toUpperCase();
char choiceletter=choiceword.charAt(0);
if(choiceletter=='Y'){
choice=true;
}
else{
choice=false;
}
}
}}}
问题来自:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at mathstrainer.main(mathstrainer.java:36)
我哪里出错了,我该如何解决?
我正在尝试使用布尔变量创建一个循环来充当问题创建者和重复者,但是可以通过将布尔值设置为false来停止循环。
此外,问题甚至意味着什么?我似乎经常遇到同样的问题。
答案 0 :(得分:2)
当您调用strcat
扫描程序读取整数并继续在同一行之后,answerinput.nextInt()
将读取输入,直到找到换行符,在您的情况下返回一个空字符串。
可能的解决方案:
answerinput.nextLine()
之后添加nextLine()
以阅读换行符。nextInt()
替换为nextLine()
。 next()
将在输入中找到下一个标记。