2013-04-21 35 views
-2

当我运行下面给出的代码时,出现以下消息。这意味着什么?在这种情况下如何克服它?Java程序中的异常

异常线程 “main” java.lang.ArrayIndexOutOfBoundsException:0 在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); 

    } 
} 

回答

2

运行代码时,您可能不会传递任何值,x可以从arg [0]中获得值。

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

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

+0

我正在通过Eclipse IDE运行它。 – josh 2013-04-21 07:03:20

+0

看看这个[链接](http://stackoverflow.com/questions/7574543/how-to-pass-console-arguments-to-application-in-eclipse)。这对你有帮助。 – Maximin 2013-04-21 07:10:55

3

从本质上讲,这意味着您要访问不存在的args数组中的索引。

在你的代码有:

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

而这个错误是抱怨,你居然没有在你的args数组的索引0,即数组为空。

为了解决这个问题,你需要在它运行通过你的程序的命令行参数,换句话说,运行它的Java ifDemo 某个整数这里

对于进一步的阅读尝试this,也是谷歌是你的朋友

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

在上面的那一行中,假设它至少有一个元素,那么您将索引到一个数组中。你确定它有一个元素吗?你打电话给你的Java程序并传入一个数字吗?

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对于该验证。如果你想要一个代码示例,请让我知道!

1

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

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

您应该更新程序并检查命令行参数并在错误消息中添加错误消息。

1

运行它为java ifDemo xxx其中xxx是一些整数。

args是一个字符串数组,它被称为Command line arguments。所以,如果你从命令行java ifDemo 10 12运行您的程序,然后ARGS将包含[10,12]args[0]将是10,args[1]将是12和args.length将2

此行抛出一个错误,因为你没有运行带有命令行参数的程序。

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

args是空的,你是在试图访问抛出,指示数组已经用非法索引访问引起ArrayIndexOutOfBoundsException阵列,的第1个要素。索引或者是负数,或者大于或等于数组的大小。

2

如果您尝试在命令提示符下运行该程序,请务必提供命令行参数。我试着运行该程序并没有发生错误。

screenshot

1

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

ARGS [0]被指定由命令行arguement的值。

javac ifDemo.java 

java ifDemo 23 

当运行程序,ARGS [0]是23,

早些时候如你没有提供由命令行任何参数,所以ARGS:在下列方式

编译和运行程序[0]没有设置,你得到一个阵列超出外部例外