This question already has answers here:
What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?
(26个答案)
4年前关闭。
我是编程新手,所以请考虑我的错误。我正在编写一个程序,用户在同一行中用空格隔开两个输入数字。我必须将第一个输入分配给整数变量,然后将第二个输入分配给 double 变量,并且必须执行一些数学运算并显示结果。以下是我的代码:
以下是我在运行它时遇到的错误。
首先,我尝试使用
为什么会出现这些错误以及如何解决以上问题。
并摆脱线:
(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()
返回下一个标记(标记是在前面和/或之后带有定界符的东西),因此在您的情况下,它仅包含20
或300.50
。
您应该稍后使用sc.nextLine()
来使用split
,这将返回整行。
或使用:
int i = Integer.parseInt(sc.next());
double d = Double.parseDouble(sc.next());
并摆脱线:
b = sc.next();
String[] split = b.split(" ");