使用 String[] args 作为用户输入并在未提供输入时设置值
Using String[] args as user input and setting values if no input is given
如果程序依赖命令行参数作为用户输入,例如询问要订购的衬衫数量、衬衫尺码和颜色选择。我知道这些值将存储在 args[0]
、args[1]
和 args[2]
中。但是,如果我希望按该顺序接收这些值,我将如何处理用户未提供这些参数中的一个或多个的情况。比如如果没有给出要订购的衬衫数量,有没有办法将该值初始化为默认值 1?
可选命令行参数有两种常用方法
使用像 java MyClass -q5
这样的标志。独自分析这些类型的论点具有挑战性。我建议使用 commons-cli.
这样的库
将可选参数放在末尾。这样,如果用户仅提供 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
参数之前检查每个参数。
无论哪种方式,您现在可能已经明白了,如果有模式并分配它,请绕过参数。
如果程序依赖命令行参数作为用户输入,例如询问要订购的衬衫数量、衬衫尺码和颜色选择。我知道这些值将存储在 args[0]
、args[1]
和 args[2]
中。但是,如果我希望按该顺序接收这些值,我将如何处理用户未提供这些参数中的一个或多个的情况。比如如果没有给出要订购的衬衫数量,有没有办法将该值初始化为默认值 1?
可选命令行参数有两种常用方法
使用像
java MyClass -q5
这样的标志。独自分析这些类型的论点具有挑战性。我建议使用 commons-cli. 这样的库
将可选参数放在末尾。这样,如果用户仅提供 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
参数之前检查每个参数。
无论哪种方式,您现在可能已经明白了,如果有模式并分配它,请绕过参数。