Java - Таблица умножения двухмерных массивов с пользовательским вводом имеет слишком много строк и столбцов - PullRequest
0 голосов
/ 22 ноября 2018

Я не понимаю конкретную часть следующего назначения и почему мои циклы с двумерной матрицей этого назначения не генерируют правильный вывод.

Я получаю слишком много строк и столбцов в выводе.Мне также нужна помощь с форматированием вывода, чтобы сделать его читаемым.

Назначение заключается в следующем:

public void getMultiplicationTable()

Этот метод будет использовать цикл while, чтобы попросить пользователявведите два целых числа от 1 до 10. Цикл while прекратится, если числа, предоставленные пользователем, будут в указанном диапазоне;в противном случае будет напечатано сообщение об ошибке, и пользователю будет предложено ввести еще два числа.

Первое число, данное пользователем, будет увеличено на единицу, затем использовано в качестве номера строки, а второе будетувеличивается на 1 и используется как номер столбца двумерного массива.Метод вычислит таблицу умножения и сохранит ее в массиве, а затем отобразит ее.

Например, если пользователь ввел 5 и 7, ваш код должен создать массив int с 6 строками и 8 столбцами, а затем создатьи загрузите массив с таблицей умножения.Напечатанный результат должен выглядеть примерно так:

0  0  0  0  0  0  0  0
0  1  2  3  4  5  6  7
0  2  4  6  8 10 12 14
0  3  6  9 12 15 18 21
0  4  8 12 16 20 24 28
0  5 10 15 20 25 30 35

Там, где я застреваю, есть часть, где говорится:

Первое число, данное пользователем, будет увеличено на единицузатем используется как номер строки, а второй будет увеличен на 1 и использован как номер столбца двумерного массива.Метод вычислит таблицу умножения и сохранит ее в массиве, а затем отобразит ее.

Кажется, я не могу получить введенные мною числа в качестве длины строки и столбца, а такжеprint out напечатает кратные до десяти (хотя технически я думаю, что девять, так как я не использовал + 1).Любая помощь, которая может быть оказана, будет принята с благодарностью.Вот что у меня есть:

public void getMultiplicationTable(){

    Scanner numsEnter = new Scanner(System.in);

    int[][] table = new int[10][10];

    int numRow = 0;
    int numCol = 0;

    System.out.println("Please enter in two numbers: ");

    while(true){
        numRow = numsEnter.nextInt();
        numCol = numsEnter.nextInt();
        if((numRow >= 1 && numRow <= 10) && (numCol >= 1 && numCol <= 10)){
            break;
        }else{
            System.out.println("These numbers are invalid, please enter two numbers between 0 & 10");
        }
    }

    numRow++;
    numCol++;

    for(int row=0; row < table.length; row++){
        for(int column = 0; column < table[row].length; column++){
            System.out.print(table [row] [column] = (row) * (column) );
        }
        System.out.println();
    }
}

Вот вывод, который я получаю, используя 5 и 7 в качестве введенных чисел:

Please enter in two numbers: 
5
7

0000000000
0123456789 
024681012141618
0369121518212427
04812162024283236
051015202530354045
061218243036424854
071421283542495663
081624324048566472
091827364554637281

Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы можете установить размер вашего массива так, чтобы он соответствовал вашим пользовательским вводам, если вы сначала запросите их, а затем определите свой 2D-массив.В настоящее время вы жестко кодируете свой 2D-массив, чтобы он был размером 10x10, но ваша логика правильна, кроме этого.

Вот как это должно выглядеть.

    public void getMultiplicationTable(){

      Scanner numsEnter = new Scanner(System.in);

    System.out.println("Please enter in two numbers: ");

    int numRow = numsEnter.nextInt();
    int numCol = numsEnter.nextInt();

    int[][] table = new int[numRow+1][numCol+1];

    System.out.println("Please enter in two numbers: ");

    while(true){
        if((numRow >= 1 && numRow <= 10) && (numCol >= 1 && numCol <= 10)){
            break;
        }else{
            System.out.println("These numbers are invalid, please enter two numbers between 0 & 10");
            numRow = numsEnter.nextInt();
            numCol = numsEnter.nextInt();
        }
    }

    numRow++;
    numCol++;

    for(int row=0; row < table.length; row++){
        for(int column = 0; column < table[row].length; column++){
            System.out.print(table [row] [column] = (row) * (column) );
            System.out.print(" ");
        }
        System.out.println();
    }

    }

Приведенный выше код выведет следующее для ввода 5 7:

0 0 0 0 0 0 0 0 
0 1 2 3 4 5 6 7 
0 2 4 6 8 10 12 14 
0 3 6 9 12 15 18 21 
0 4 8 12 16 20 24 28 
0 5 10 15 20 25 30 35 
0 голосов
/ 22 ноября 2018

Это потому, что вы объявляете таблицу массивом 10x10 для запуска, а затем используете длину массива в своих условиях в циклах for.Вам следует создать таблицу после того, как вы узнаете размер таблицы (или измените свои условия).

...