Java 使用args数组时获取边界外异常

Java 使用args数组时获取边界外异常,java,Java,我正在做作业,不允许使用扫描仪。相反,我们必须使用int money=Integer.parseIntargs[0]。我试着写我的代码,它可以编译,但是有一个运行时错误,我想知道是否有人能告诉我我做错了什么,让我走上正确的轨道 这是我的密码: class MakingChange { public static void main(String[] args) { int money = Integer.parseInt(args[0]); int toonies = (

我正在做作业,不允许使用扫描仪。相反,我们必须使用int money=Integer.parseIntargs[0]。我试着写我的代码,它可以编译,但是有一个运行时错误,我想知道是否有人能告诉我我做错了什么,让我走上正确的轨道

这是我的密码:

class MakingChange {
  public static void main(String[] args) {
    int money   = Integer.parseInt(args[0]);
    int toonies = (money / 200);
    System.out.println(toonies);
  }
}
错误是

java.lang.ArrayIndexOutOfBoundsException: 0
at Money.main(Money.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
我不知道该怎么解释这个错误!任何帮助都将不胜感激。

嗯,ArrayIndexOutOfBoundsException意味着您试图访问内存中未使用或未初始化的索引

看起来您正在通过命令行运行程序;您需要将参数传递到已编译的.class文件以使其均匀运行。

问题在于:

int money = Integer.parseInt(args[0]);
您可能正在尝试访问args数组的第一个元素, 但是使用的数组是空的零项

您确定要将任何参数正确地传递给应用程序吗? 它们应该与程序隔开,在执行编译程序时,这里是一个使用jar文件的示例:

java -jar MyProgram.jar 1234
您可以添加一些错误处理代码以防止出现这种情况,例如检查args数组大小的if语句:

int money = 0;
if(array.size() != 0) {
    money = Integer.parseInt(args[0]);
}
甚至可以使用try-catch块:

try {
    //....
    int money = Integer.parseInt(args[0]);
    //....
}
catch(ArrayIndexOutOfBoundsException e) {
    //Error handling code here.
    System.err.println(e.getMessage());
}

您没有向程序传递任何参数

在方法的开头添加以下内容:

if (args.length == 0)
    throw new IllegalArgumentException("No arguments found");
要传递参数,请执行以下操作:

java Money 123

您应该编写防御代码,请尝试以下操作:

if(args.length>0){
    int money   = Integer.parseInt(args[0]);
    int toonies = (money / 200);
    System.out.println(toonies);
}else{
    System.out.println("Missing Command Line Arguments");
}

用参数运行程序?我以为数组应该是0,这样我就可以生成一个随机数。另外,当我尝试检查数组大小时,Java博士告诉我没有名为array的变量,它找不到符号。如果这些问题的答案显而易见,我很抱歉,但我对编程相当陌生,在这里我感到困惑。args是一个Java数组,包含命令行参数。请注意,main在执行时将其作为传递给程序的参数。args[0]表示数组中的第一个args数组元素,计数从0开始,因此args[0]表示第一个数组元素,args[1]表示第二个数组元素,等等。那么我该如何修复错误?请详细阅读我的答案。谢谢。如果您建议我将args[0]更改为args[1],这没有什么区别。它打印了缺少的命令行参数。我需要添加什么来解决这个问题,因为我只想为这个分配给我一个随机数?您必须从命令提示符运行程序并提供命令行参数。点击这个链接:是的,这就是我最后要做的,谢谢