【问题标题】:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 Error [duplicate]线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:1错误[重复]
【发布时间】:2016-06-29 20:11:26
【问题描述】:

我是编程新手,所以请考虑一下我的错误。我正在编写一个程序,其中用户在一行中给出两个输入数字,由空格分隔。我必须将第一个输入分配给一个整数变量,第二个输入分配给一个双精度变量,并且必须执行一些数学运算并显示结果。以下是我的代码:

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.nextLine 而不是sc.next
  • @Tunaki 这不是重复的,问题是不同的,虽然它会抛出 ArrayIndexOutOfBoundsException
  • @krzyk 问题是一样的:试图访问超出范围的数组的索引。正是理解了这个错误导致了解决方案,即为什么split[1]会抛出异常,为什么b.split(" ")返回一个长度为1的数组,为什么next()只有1个空格。 OP 也可以参考stackoverflow.com/questions/22458575/…
  • @Tunaki 您可以对 NPE 和 JDK 的所有其他例外说同样的话。但是有很多问题可能导致这些异常,将所有问题都投入到严格数量的已经回答的问题中并没有帮助

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


【解决方案1】:

您使用了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(" ");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多