假设来自命令行的参数:Hello,这是一条消息
我想在屏幕上打印参数的数量,仅限一次,并打印在顶部。
如何在“this”之前或甚至在任何参数之前打印“message”,但是用户要在索引0处写“this”,而“message”可以在任何索引处?
for (int i=0; i < args.length; i++)
{
if(i= args.length) {System.out.println(i);} //this command says,
you cannot convert from int to boolean
System.out.println(args.length); // this command prints repeatedly
if (args[i].startsWith("this"){System.out.println(args[i]);}
if (args[i].startsWith("message"){System.out.println(args[i]);}
} // end of for
答案 0 :(得分:2)
if(i = args.length) //Here is the problem
您错误地使用单'='
来比较i和args.length。您需要使用'=='
将i与args.length进行比较。
您需要执行以下操作
if(i == args.length)
答案 1 :(得分:1)
你的情况永远不会true
,它永远不会进入。
查看原因。
for (int i=0; i < args.length; i++) // looping with less than.
{
if(i== args.length) {System.out.println(i);} // condition ==.
怎么满足?你明白了吗?
如果您无法添加@ Cruncher的评论
为了更好地解释这个:i&lt; args.length和i == args.length是相互排斥的条件。也就是说,如果一个是真的那么另一个是假的。如果你需要两者都是真的。
答案 2 :(得分:1)
i
是一个数字。 args.length
也是一个数字。您的错误是您只使用一个=
来检查相等而不是==
。 =
用于分配新值。因此,i
将获得args.length
的值,而您的if
无法检查数字是真还是假。
此外,你应该使用for-each而不是classic for。
for (String argument : args) {
// do something with one argument
}
即使您需要索引,如果使用for-each,代码中的错误也会减少。对于index,我正在使用另一个在循环内递增的int / long变量。
答案 3 :(得分:0)
System.out.println(args.length);
重复打印,因为它位于for循环中。
如果它只打印一次并且在顶部,它必须在for循环之前。
此外,因为循环从i = 0
运行到i < args.length
,所以表达式i == args.length
在循环内永远不会成立。
答案 4 :(得分:0)
首先,你的逻辑比它需要的要复杂一些。您可以通过简单地将args.length传递给println来打印出参数的数量。然后,如果你想按照你选择的顺序打印出某些参数,你可以为每个参数创建一个for循环,这将查找是否存在这样的参数,如果存在,则打印它。
示例:
for (int i=0; i < args.length; i++)
{
if (args[i].startsWith("message"){System.out.println(args[i]);}
}
for (int i=0; i < args.length; i++)
{
if (args[i].startsWith("this"){System.out.println(args[i]);}
}
有更多优雅的方法可以按照您希望的顺序打印出符合某些术语的参数,但这样可行。