无法读取字符串(Java)中的字符

时间:2011-11-26 19:48:14

标签: java java.util.scanner

我在让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);行。显然这里出了点问题。任何帮助将不胜感激!

2 个答案:

答案 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());