【发布时间】: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