线程"main"中的异常java.lang.ArrayIndexOutOfBoundsException:0

Joh*_*per 1 java

public class TestSample {
    public static void main(String[] args) {
        System.out.print("Hi, ");
        System.out.print(args[0]);
        System.out.println(". How are you?");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我编译这个程序时,我收到此错误:

线程"main"中的异常java.lang.ArrayIndexOutOfBoundsException:0


另外,为什么我不能args接受这样的int数组:

public static void main(int[] args) {
Run Code Online (Sandbox Code Playgroud)

Cha*_*win 8

1. ArrayIndexOutOfBoundsException:0

抛出它是因为args.length == 0因此args[0]超出了有效索引的数组范围(了解有关数组的更多信息).

添加检查args.length>0以修复它.

public class TestSample {
    public static void main(String[] args) {
        System.out.print("Hi, ");
        System.out.print(args.length>0 ? args[0] : " I don't know who you are");
        System.out.println(". How are you?");
   }
}
Run Code Online (Sandbox Code Playgroud)

2.命令行args为int

您必须将参数解析为int[]自己,因为命令行参数仅作为a传递String[].为此,请使用Integer.parseInt(),但您需要进行异常处理以确保解析正常(了解有关异常的更多信息).Ashkan的回答告诉你如何做到这一点.


Ash*_*yan 5

关于你问题的第二部分:

来自http://download.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html:

解析数字命令行参数

如果应用程序需要支持数字命令行参数,则它必须将表示数字的String参数(例如"34")转换为数字值.这是一个将命令行参数转换为int的代码片段:

int firstArg;
if (args.length > 0) {
    try {
        firstArg = Integer.parseInt(args[0]);
    } catch (NumberFormatException e) {
        System.err.println("Argument must be an integer");
        System.exit(1);
    }
}
Run Code Online (Sandbox Code Playgroud)