使用命令行命令:
java class -table 7
应该打印一张表:
7 7 7 7 7 7 7 7 7 7
7 8 9 10 11 12 13 14 15 16
7 9 11 13 15 17 19 21 23 25
7 10 13 16 19 22 25 28 31 34
7 11 15 19 23 27 31 35 39 43
7 12 17 22 27 32 37 42 47 52
7 13 19 25 31 37 43 49 55 61
7 14 21 28 35 42 49 56 63 70
7 15 23 31 39 47 55 63 71 79
7 16 25 34 43 52 61 70 79 88
这是一个10 x 10乘法表,带有" 7"添加到每个号码。 换句话说,它为下表中的每个数字增加了7:
0 0 0 0 0 0 0 0 0 0
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18
0 3 6 9 12 15 18 21 24 27
0 4 8 12 16 20 24 28 32 36
0 5 10 15 20 25 30 35 40 45
0 6 12 18 24 30 36 42 48 54
0 7 14 21 28 35 42 49 56 63
0 8 16 24 32 40 48 56 64 72
0 9 18 27 36 45 54 63 72 81
以下代码是我目前所拥有的。它打印出从0开始的原始表。但是我不明白我是如何为每个值添加args[1]
的。 (args[1]
在上述情况下为7)。如何将args[1]
添加到表格中的每个值?
我也应该打印"参数计数不匹配"如果用户未在命令行中int
之后准确放置1 -table
。
对于我的代码,它打印"参数计数不匹配"在适当的时间,但它打印所有数字,所以它打印线100次。我知道我应该把这部分代码放在循环之外,因为我只希望它打印一次。我怎么能实现它呢?
private static void table(String[] args) {
int[][] table = new int[10][10];
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (args.length != 2)
System.out.println("Argument count mismatch");
else
System.out.printf("%6d", i * j);
}
System.out.println();
}
}
答案 0 :(得分:3)
好的,将第二个命令行参数解析为Int并将其添加到每个值:
private static void table(String[] args) {
int numToAdd = Integer.parseInt(args[1]);
int[][] table = new int[10][10];
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.printf("%6d", i * j + numToAdd);
}
System.out.println();
}
}
不确定为什么你创建了一个表双数组,因为你从不使用它。
输出:
java Test -test 7
7 7 7 7 7 7 7 7 7 7
7 8 9 10 11 12 13 14 15 16
7 9 11 13 15 17 19 21 23 25
7 10 13 16 19 22 25 28 31 34
7 11 15 19 23 27 31 35 39 43
7 12 17 22 27 32 37 42 47 52
7 13 19 25 31 37 43 49 55 61
7 14 21 28 35 42 49 56 63 70
7 15 23 31 39 47 55 63 71 79
7 16 25 34 43 52 61 70 79 88
我会创建一个不同的方法:
public static boolean validateArgs(String[]args){
//all code to validate the args here.
//print validation specific errors here
}
然后你的主要:
public static void main(String[]args){
if(validateArgs(args)){
table(args);
}
}
答案 1 :(得分:1)
例如:
private static void table(String[] args) {
int[][] table = new int[10][10];
if (args.length != 2) {
System.err.println("Argument count mismatch");
exit(1);
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.printf("%6d", i * j + 7);
}
System.out.println();
}
}
(如果您不喜欢退出,请使用if ... else代替。)
答案 2 :(得分:0)
你几乎已经回答了自己:
你应该把检查放在循环外面。 args
不会在数字之间发生变化,每次需要添加数字时都无需检查。
将问题分解为两部分会更好:
完成第一部分后,第二部分是微不足道的。您有一些int toAdd
的号码,因此只需打印i * j + toAdd
而不是i * j
。
第一部分有点棘手:
您需要首先验证输入,即正好有2个参数,第二个是有效数字。您还需要将String
实际转换为数字。检查编号和转换部分可以通过Integer.parseInt()
一次完成。
因此,合并后的代码,简写:
if (args.length != 2) {
System.out.println("Argument count mismatch");
return;
}
int toAdd;
try {
toAdd = Integer.parseInt(args[1]);
catch (NumberFormatException e) {
System.out.println("Second argument is not a number!");
return;
}
// Your modified loop goes here