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 "。 无法理解这些输出是如何产生的。
答案 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