将整数添加到乘法表

时间:2014-10-06 17:09:52

标签: java arrays

使用命令行命令:

  
    

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();
    }    
}

3 个答案:

答案 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