java - 为什么我在此代码中收到 StringIndexOutOfBoundsException?

标签 java indexoutofboundsexception

我在 Java 中收到以下错误消息

Exception in thread "main" 

    java.lang.StringIndexOutOfBoundsException: String index out of range: 0

这是我的代码 -

public static void main(String[] args) {

    double gissade = 70;
    int input;
    java.util.Scanner in = new java.util.Scanner(System.in);

    char spelaIgen = 'j';
    // char input2;

    int antal = 1;

    while (spelaIgen == 'j') {
        System.out.print("gissa ett number?");
        Input = in.nextInt();

        if (input < gissade) {
            System.out.println("du har gissat för lågt försök igen");
            antal++;
        } else if (input > gissade) {
            System.out.println("du har gissat för högt försök igen");

            antal++;
        }
        if (input == gissade) {
            System.out.println("du har gissat rätt");
            System.out.println("efter " + antal + " försök");
        }

        System.out.println("vill du försöka igen? j/n");
        char input2 = in.nextLine().charAt(0);
        // String s1=in.nextLine();
        // char c1=s1.charAt(0);

        // if (input=='n');
        // System.exit(0);

    }
}

最佳答案

这是因为 nextInt() 不会消耗 newLine,因此当您尝试执行 readLine() 时,您会得到一个空字符串,并尝试执行

"".charAt(0);

它会抛出你的异常。

尝试在 nextInt() 之后添加额外的 nextLine()

一个好的做法是始终使用 nextLine(),然后解析获得的字符串。例如,要获取您的 int,您可以这样做:

String intInput;
do {
  System.out.print("gissa ett nummer?");
  intInput = in.nextLine();
while(!intInput.matches("\\d+"));
int number = Integer.parseInt(intInput);

这将重复,直到您输入有效的数字。

关于java - 为什么我在此代码中收到 StringIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11541415/

相关文章:

java - 使用来自 Blender 2.62+ 的 .obj 文件,在 java 中与 Eclipse for Android openGL ES

java - 如何更新 JPanel 中的 JLabel?

java - IndexOf(), 字符串索引越界 : -1

java - 创建方法必须检查两个数中哪个较大,并执行从小到大的递增计数

java - 如何用空格分隔单词?

java - 如何在 Java 中表示范围?

c++ - vector 分配崩溃

java - executeUpdate() 抛出 ArrayIndexOutOfBoundsException

c - 为什么值超出了数组的索引?

android - EditText setSelection 不适用于大于 8 的位置