【问题标题】:Printing number of command line arguments of Java application打印 Java 应用程序的命令行参数的数量
【发布时间】:2026-02-04 04:40:01
【问题描述】:

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

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

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

【问题讨论】:

  • 你有什么问题?

标签: java command-line arguments


【解决方案1】:
if(i = args.length) //Here is the problem

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

你需要像下面那样做

if(i == args.length)

【讨论】:

  • 正如其他答案中提到的,这不是唯一的问题,但肯定是一个大问题
  • 感谢@Cruncher 的帮助,我试图在开头打印世界信息,假设发件人输入:(你好,这是我,我的信息是......)或输入(你好,这是消息),这里的消息可以在任何索引处,如何在 for 循环中首先打印它
  • @mijcara 我不确定你在问什么,你只是想打印“消息”?还是您的意思是“消息”之后的所有内容?这可能是另一个问题,但是找到消息的索引,然后从消息开始执行一个 for 循环
【解决方案2】:

你的条件永远不会true,它永远不会进入内部。

看看原因。

 for (int i=0; i < args.length; i++)  //  looping with less  than.
{


if(i== args.length) {System.out.println(i);} //  condition ==.

怎么满足?你说对了吗?

如果您无法添加@Cruncher 的评论

为了更好地解释这一点:i

【讨论】:

  • 为了更好地解释这一点:i &lt; args.lengthi == args.length 是互斥条件。也就是说,如果一个是真的,那么另一个是假的。你需要两者都是真实的才能进入这个 if。
【解决方案3】:

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

另外,你应该使用 for-each 而不是经典的 for。

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

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

【讨论】:

    【解决方案4】:

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

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

    此外,由于循环从i = 0 运行到i &lt; args.length,表达式i == args.length 在循环内永远不会为真。

    【讨论】:

      【解决方案5】:

      首先,您的逻辑比它需要的要复杂一些。您可以通过简单地将 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]);}
      }
      

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

      【讨论】: