This question already has answers here:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?

(26个答案)


4年前关闭。




我是编程新手,所以请考虑我的错误。我正在编写一个程序,用户在同一行中用空格隔开两个输入数字。我必须将第一个输入分配给整数变量,然后将第二个输入分配给 double 变量,并且必须执行一些数学运算并显示结果。以下是我的代码:
import java.util.Scanner;
public class foo{
    public static void main(String[] args){
        String b = null;
        Scanner sc = new Scanner(System.in);
        b = sc.next();
        String[] split = b.split(" ");
        int i = Integer.parseInt(split[0]);
        double d = Double.parseDouble(split[1]);
        System.out.println(i+20);
        System.out.println(d-1.50);
    }
}

以下是我在运行它时遇到的错误。
F:\java\work\codechef>javac foo.java

F:\java\work\codechef>java foo
20 300.50
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
        at foo.main(foo.java:9)

首先,我尝试使用b=sc.readLine();进行编译,但在编译时出现以下错误:
error: cannot find symbol
                b = sc.readLine();
                      ^
  symbol:   method readLine()
  location: variable sc of type Scanner
1 error

为什么会出现这些错误以及如何解决以上问题。

最佳答案

您使用sc.next()返回下一个标记(标记是在前面和/或之后带有定界符的东西),因此在您的情况下,它仅包含20300.50

您应该稍后使用sc.nextLine()来使用split,这将返回整行。

或使用:

int i = Integer.parseInt(sc.next());
double d = Double.parseDouble(sc.next());

并摆脱线:
    b = sc.next();
    String[] split = b.split(" ");

07-26 09:29
查看更多