当我运行下面的代码时,会显示以下消息。它是什么意思,我在这种情况下如何克服它?
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0 at ifDemo.main(ifDemo.java:5)
public class ifDemo {
public static void main (String [] args)
{
int x= Integer.parseInt(args[0]);
double half=0.0;
if (x!=0)
{
half=x/2.0;
System.out.println(x+ "/2 = "+half);
}
if (x==0)
{
System.out.println("The value of x is "+x);
}
int y=x*5;
char grade='F';
if(y>=85)
{
grade='A';
}
if (y>=70 && y<85)
grade='C';
System.out.println("y= "+y+ "and grade equal to "+grade);
}
}
答案 0 :(得分:3)
基本上这意味着您正在尝试访问args数组中不存在的索引。
在您的代码中,您有:
int x= Integer.parseInt(args[0]);
这个错误抱怨你args数组中实际上没有索引0,即数组为空。
要解决此问题,您需要在运行时传递程序命令行参数,换句话说,将其作为java运行ifDemo 这里有一些整数
如需进一步阅读,请尝试this,Google也是您的朋友
答案 1 :(得分:2)
在运行代码时,您可能无法传递x
可以从arg [0]获取值的任何值。
运行代码时传递值,这将解决问题。
您是否使用命令行执行它?
答案 2 :(得分:2)
当您从命令行运行程序时,您忘记添加一个参数:
java ifDemo.class 1
基本上变量args
绝对没有任何内容。因此,当您尝试获取args[0]
的值时,它会抛出ArrayIndexOutOfBoundsException
。您可以阅读更多相关信息here。
您可以添加的是一种验证形式,用于检查用户是否输入了一个号码,如果没有,则告诉他们。代码看起来像这样:
if(args == null || args.length == 0) {
System.out.println("Please enter a number as a command line argument.");
System.exit(0);
}
或者您可以考虑获取input from the console并使用do while loop进行验证。如果你想要一个代码示例,请告诉我!
答案 3 :(得分:2)
如果您尝试在命令提示符下运行该程序,请确保提供命令行参数。我尝试运行程序并没有错误。
答案 4 :(得分:1)
int x= Integer.parseInt(args[0]);
在上面的那一行中,假设它至少有一个元素,那么你将索引到一个数组中。你确定它中有一个元素吗?你在调用java程序并传入一个数字吗?
答案 5 :(得分:1)
int x = Integer.parseInt(args [0]);
这是尝试读取第一个命令行参数。 当没有你描述的例外情况时它会失败。
您应该通过检查命令行参数来更新程序,如果它们不对,请添加错误消息。
答案 6 :(得分:1)
以java ifDemo xxx
运行它,其中xxx
是一个整数。
args
是一个名为Command line arguments的String数组。因此,如果您从命令行以java ifDemo 10 12
运行程序,则args将包含[10,12]
,args[0]
将为10,args[1]
将为12且args.length
将是2。
这行引发了一个错误,因为你没有使用命令行参数运行程序。
int x= Integer.parseInt(args[0]);
args
为空,您正在尝试访问数组的第一个元素,该元素导致ArrayIndexOutOfBoundsException,抛出,表示已使用非法索引访问了数组。索引为负数或大于或等于数组的大小。
答案 7 :(得分:1)
您没有将整数作为命令行参数int x= Integer.parseInt(args[0]);
通过命令行争论为args [0]分配一个值。
按以下方式编译和运行程序:
javac ifDemo.java
java ifDemo 23
运行程序时,args [0]为23。
之前您没有通过命令行提供任何参数,因此未设置args [0]并且您获得 array-outofbound-exception 。