我在让Java读取String中的第一个字符时遇到了一些麻烦。我这里包含了到目前为止的代码(超出此范围的代码,我认为,根本不相关):
import java.util.Scanner;
public class SeveralDice {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("How many dice do you want to use? ");
int numberOfDice = input.nextInt();
SeveralDice game = new SeveralDice(numberOfDice);
System.out.print("You have 0 points. Another try(y/n)? ");
boolean turn = true;
String answerInput;
char answer;
int lastValue = 0;
while (turn) {
answerInput = input.nextLine();
answer = answerInput.charAt(0);
if (answer == 'y') {. . . . .
然后代码继续。但是,当我运行程序时,我收到错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at SeveralDice.main(SeveralDice.java:25)*
第25行是answer = answerInput.charAt(0);
行。显然这里出了点问题。任何帮助将不胜感激!
答案 0 :(得分:2)
这是因为当你这样做时:
int numberOfDice = input.nextInt();
您在用户输入的int
中读取,但\n
仍在输入流中。
您的循环中第一次调用input.nextLine()
会在\n
上标记,因此它会在空行中读取,因此answerInput
的长度为零。 nextLine()
与nextInt()
的不同之处在于,它将整行读取为String
,并从输入中删除尾随的\n
。
正如其他人发布的那样,检查answerInput
的长度将解决问题。您也可以在从input.nextLine()
int
后致电nextInt()
答案 1 :(得分:1)
似乎输入“多少骰子......”的整数也会触发对nextLine()的调用以读取一个空行(因为你在写完整数后按Enter键)所以你正在读一个字符串0个字符。我建议你换掉:
int numberOfDice = input.nextInt();
与
int numberOfDice = Integer.parseInt(input.nextLine());