2

假设来自命令行的参数:您好,这是一条消息

我想在屏幕上打印参数的数量,仅一次并打印在顶部。

还有如何在“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
4

5 回答 5

2
if(i = args.length) //Here is the problem

错误地,您使用 single'='将 i 与 args.length 进行比较。您需要使用'=='将 i 与 args.length 进行比较。

你需要像下面那样做

if(i == args.length)
于 2013-10-03T15:35:01.857 回答
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 < args.length 和 i == args.length 是互斥条件。也就是说,如果一个是真的,那么另一个是假的。你需要两者都是真实的才能进入这个如果。

于 2013-10-03T15:36:32.657 回答
1

i是一个数字。args.length也是一个数字。您的错误是您只使用一个=来检查相等性而不是==. =用于分配新值。因此,i将获得 的值,args.length并且您if无法检查数字是真还是假。

此外,您应该使用 for-each 而不是经典 for。

for (String argument : args) {
  // do something with one argument
}

即使您需要索引,如果您使用 for-each,您的代码中的错误也会更少。对于索引,我使用了另一个在循环内递增的 int/long 变量。

于 2013-10-03T15:39:03.427 回答
0

System.out.println(args.length);重复打印,因为它在 for 循环中。

如果它应该只打印一次并且在顶部它必须在 for 循环之前。

此外,因为循环运行 fromi = 0i < args.length表达式i == args.length在循环内永远不会为真。

于 2013-10-03T15:46:52.493 回答
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]);}
}

有更优雅的方法可以按照您希望它们与某些术语匹配的顺序打印出参数,但这会起作用。

于 2013-10-03T16:06:08.353 回答