-2

当我运行下面给出的代码时,出现了以下消息。这是什么意思,在这种情况下我该如何克服它?

线程“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);

    }
}
4

8 回答 8

3

本质上,这意味着您正在尝试访问 args 数组中不存在的索引。

在您的代码中,您有:

int x= Integer.parseInt(args[0]);

这个错误是抱怨你的 args 数组中实际上没有索引 0,即数组是空的。

为了解决这个问题,您需要在程序运行时传递程序命令行参数,换句话说,将其作为 java ifDemo Some Integer Here运行

进一步阅读试试这个,谷歌也是你的朋友

于 2013-04-21T06:54:01.100 回答
2

在运行代码时,您可能没有传递任何x可以从 arg[0] 获取值的值。

在运行代码时传递值,这将解决问题。

您是否使用命令行来执行它?

于 2013-04-21T06:54:19.200 回答
2

当您从命令行运行程序时,您忘记添加参数,如下所示:

java ifDemo.class 1

所以本质上,变量args绝对不包含任何内容。因此,当您尝试获取它的值时args[0],会抛出ArrayIndexOutOfBoundsException. 你可以在这里阅读更多关于它的信息。

您可以添加一种验证形式,检查用户是否输入了数字,如果没有,告诉他们。代码看起来像这样:

if(args == null || args.length == 0) {
    System.out.println("Please enter a number as a command line argument.");
    System.exit(0);
}

或者您可以考虑从控制台获取输入并使用do while 循环进行验证。如果您想要一个代码示例,请告诉我!

于 2013-04-21T06:54:34.573 回答
2

如果您尝试在命令提示符中运行程序,请确保提供命令行参数。我尝试运行该程序并没有出现错误。

截屏

于 2013-04-21T06:55:24.890 回答
1
int x= Integer.parseInt(args[0]);

在上面的那一行中,您正在索引一个数组,假设它至少有 1 个元素。你确定它有一个元素吗?你是在调用你的java程序并传入一个数字吗?

于 2013-04-21T06:54:28.820 回答
1

int x= Integer.parseInt(args[0]);

这是试图读取第一个命令行参数。它会失败,除了你描述的没有例外。

您应该通过检查命令行参数来更新程序,并在它们有误时添加错误消息。

于 2013-04-21T06:54:39.530 回答
1

运行它作为java ifDemo xxx一个xxx整数。

args是一个字符串数组,称为命令行参数。因此,如果您从命令行运行程序 as java ifDemo 10 12,则 args 将包含[10,12]args[0]10、12args[1]args.length2。

此行引发错误,因为您没有使用命令行参数运行程序。

int x= Integer.parseInt(args[0]);

args是空的,并且您试图访问导致ArrayIndexOutOfBoundsException的数组的第一个元素,抛出以指示已使用非法索引访问了数组。索引为负数或大于或等于数组的大小。

于 2013-04-21T06:55:21.080 回答
1

您没有将整数作为命令行参数传递int x= Integer.parseInt(args[0]);

args[0] 通过命令行参数赋值。

按以下方式编译和运行程序:

javac ifDemo.java

java ifDemo 23

运行程序时,args[0] 为 23。

早些时候,由于您没有通过命令行提供任何参数,因此未设置 args[0] 并且您得到了array-outofbound-exception

于 2013-04-21T06:56:39.347 回答