args.length没有给出正确的索引

时间:2018-01-14 19:55:25

标签: java arrays

public class MyClass {
    public static void main(String args[]) {
        String[] numbers = {"one", "two", "three", "four"};
        if (args.length == 0)
            System.out.println("No args");
        else
            System.out.println(numbers[args.length] + " args");
    }
}

它显示输出" no args "首先,如果我评论它显示的第3,第4,第5行代码" 一个args "。 无法理解这些输出是如何产生的。

3 个答案:

答案 0 :(得分:2)

如果显示参数,则会打印No args

String[] numbers = {"one","two","three","four"};
if(args.length==0)                       //l3
    System.out.println("No args");       //l4
else                                     //l5
    System.out.println(numbers[args.length] + " args");

注释第3行到第5行: 如果给出 no 参数,则会打印one args,因为数组索引从0开始,因此numbers[args.length] = numbers[0] = 'one'

String[] numbers = {"one","two","three","four"};
System.out.println(numbers[args.length] + " args");

您应该更改为:

  • System.out.println(numbers[args.length-1] + " args");

OR

  • String[] numbers = {"no(zero)","one","two","three","four"};并删除if/else

答案 1 :(得分:2)

无论No args数组是否包含一个或多个元素,输出都为numbers,因为您要检查args数组是否长度为0然后做点别的事。您没有检查numbers数组。

语句System.out.println(numbers[args.length] + " args");只会在args的长度大于0时执行,这可以通过从命令行传递输入来实现。

我无法准确记住它所调用的内容,但在大多数IDE中都有一个工具,您可以将输入传递给main方法,而不是使用实际的命令行。

最后,但并非最不重要的是,您可能希望numbers[args.length-1]而不是numbers[args.length],因为数组是从零开始的。

答案 2 :(得分:1)

如果您没有传递任何命令行参数,args[]的长度等于0. args[]的长度是命令行中传递的参数数量(以空格分隔) 。根据这些信息:

if (args.length == 0)   // Yes, args.length is equal to 0, so...
    System.out.println("No args");   // This line is printed and "else" part is not being executed.
else
    System.out.println(numbers[args.length] + " args");   // Not executed

但是,如果你注释掉以下几行:

String[] numbers = {"one", "two", "three", "four"};
// if (args.length == 0)
//     System.out.println("No args");
// else
       System.out.println(numbers[args.length] + " args");

仅执行此行:System.out.println(numbers[args.length] + " args");,因此您打印到控制台:numbers[0]的值为" one"并附加" args"它。结果是:" one args"。

顺便说一下,如果要在else语句的if-else部分中打印正确数量的参数,则应更改以下行:

System.out.println(numbers[args.length] + " args");

为:

System.out.println(numbers[args.length - 1] + " args");

因为数组的索引从0开始,而不是从1开始。通过添加以下简单的行,检查您的代码是否打印出了您不希望的内容:

System.out.println("numbers[0] = " + numbers[0]); // Output at index 0: one
System.out.println("numbers[1] = " + numbers[1]); // Output at index 1: two
System.out.println("numbers[2] = " + numbers[2]); // Output at index 2: three