获取参数时数组索引超出范围

到目前为止,我已经设法做了各种简单的事情,比如分配变量,计算什么不是,编译它们以及所有那些好东西……

本节介绍使用ifelse语句的决策。 这是代码:

 public class Decision { public static void main(String[] args) { if (argv[0].equals("xyz")) System.out.println("Login successful"); else System.out.println("Login incorrect"); } } 

所以我在CMD中编译程序并尝试运行它,但我明白了:

线程“main”中的exceptionjava.lang.ArrayIndexOutOfBoundsException:0在Decision.main(Decision.java:5)

我知道代码中可能存在一个问题,但似乎无法找到它 – 而且我知道一旦我拥有它就会明显地显而易见!

您可能没有输入任何命令行参数,因此args数组的长度为0,因此ArrayIndexOutOfBoundsException

首先检查长度,如果长度不是至少1,则将条件短路:

 if (args.length >= 1 && args[0].equals("xyz")) 

如果args.length >= 1false ,则不会对args[0]进行求值,并且不会抛出ArrayIndexOutOfBoundsException ,这会使整个条件为false

 if (argv.length > 0 && argv[0].equals("xyz")) { … } else { … } 

为什么不添加一个检查以确定您的数组是否为空? 就像是:

 if(argv.length == 0) { argv[0] = ""; } //everything else...