使用 String[] args 作为用户输入并在未提供输入时设置值

Using String[] args as user input and setting values if no input is given

如果程序依赖命令行参数作为用户输入,例如询问要订购的衬衫数量、衬衫尺码和颜色选择。我知道这些值将存储在 args[0]args[1]args[2] 中。但是,如果我希望按该顺序接收这些值,我将如何处理用户未提供这些参数中的一个或多个的情况。比如如果没有给出要订购的衬衫数量,有没有办法将该值初始化为默认值 1?

可选命令行参数有两种常用方法

  1. 使用像 java MyClass -q5 这样的标志。独自分析这些类型的论点具有挑战性。我建议使用 commons-cli.

  2. 这样的库
  3. 将可选参数放在末尾。这样,如果用户仅提供 2 个参数,您就会知道这些是尺寸和颜色。

命令行参数的灵活性很小:环境将它们作为 String[] 数组传达给您,这意味着各个参数没有名称,只有索引。

您需要决定如何处理缺少一个或多个 command-line 个参数的情况,但请记住,不可能 "skip" 个参数位于中间:只要一个参数是省略,它始终是尾随参数。例如,如果用户使用参数 XXL GREEN 调用您的程序,这些参数将放在 args[0]args[1] 中,而 args[2] 将丢失;参数不会放在 args[1]args[2].

一个简单的选择是将指定的参数少于三个的情况视为错误。如果这不够灵活,您可以单独解析参数,并尝试推断它们 "mean"。例如,如果您在任何位置看到 "S""M""L""XL""XXL",您的程序可能会将其视为大小的指示.

我想到的一个技巧是固定参数的长度,或者在有模式的情况下绕过它。

对于您的示例,大小始终是一个数字,因此您可以循环参数并将数字保留给您的 length。 对于大小,您可以提示用户使用 X,M,L,XL,假设它变成最大两个字符长度,然后您可以再次循环参数并将其存储为您的 size。对于 color 你可以像 RED, GREEN 一样将它变成字符串并且大于 2 个字符并将它分配给你的 color 参数。如果你想更进一步,那么你可以将 size 的关键字保留为 S,M,L,XXL,XL 等之一,并在分配给 color 参数之前检查每个参数。 无论哪种方式,您现在可能已经明白了,如果有模式并分配它,请绕过参数。