2014-10-06 11 views
1

С помощью команды командной строки:Добавление целых чисел в таблицу умножения

Java класс -стол 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 × 10 t с добавлением «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] к каждому значению в таблице?

Я также должен печатать «несоответствие счетчика», если пользователь не поставил ровно 1 int после -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

Добро пожаловать на ТАК! Имейте upvote для хорошо написанного первого вопроса! – Thomas

+0

'Я понимаю, что я должен поместить эту часть кода за пределы циклов. Итак, поставьте ее вне цикла ... затем добавьте оператор' return; 'внутри' if', чтобы завершить этот метод. Вы уже точно описали, что вам нужно делать. – tnw

+0

Но если я распечатаю несоответствие кода Аргумента, я также не хочу печатать диаграмму. Чтобы распечатать диаграмму (и обратиться к обоим i и j), мне нужно было бы вставить это внутри цикла, да? – Jerry

ответ

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

Например:

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

(. Если вы не предпочитаете выход, используйте, если ... еще вместо этого)

+0

Спасибо, я думаю, именно так оно и должно работать – Jerry

0

Вы очень много уже ответил себе:

Yo u должен поставить проверку вне цикла. args не меняется с номера на номер, нет смысла проверять его каждый раз, когда вам нужно добавить номер.

Было бы намного лучше, чтобы разложить проблему на 2 части:

  • Validate аргументы и найти номер, который нужно добавить.
  • Распечатайте фактическую таблицу с добавленным номером.

После того, как вы завершили первую часть, вторая тривиальна. У вас есть номер 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