线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1错误

时间:2016-06-29 20:11:27

标签: java compiler-errors runtime-error computer-science

我是编程新手,所以只要考虑我的错误。我正在编写一个程序,用户在一行中用空格分隔两个输入数字。我必须将第一个输入分配给一个整数变量,然后将第二个输入分配给一个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

为什么我会收到这些错误以及如何解决上述问题。

1 个答案:

答案 0 :(得分:1)

您使用sc.next()返回下一个标记(标记是在之前和/或之后具有分隔符的标记),因此它只包含您的20300.50。< / p>

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

或使用:

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

摆脱界限:

    b = sc.next();
    String[] split = b.split(" ");