Java-具有用户输入的2D数组乘法表的行和列过多

时间:2018-11-22 04:36:00

标签: java arrays multidimensional-array 2d user-input

我不了解以下分配的特定部分,为什么我的带有此分配的2D矩阵的循环无法生成正确的输出。

我在输出中得到太多的行和列。我还需要帮助格式化输出以使其可读。

任务是执行以下操作:

public void getMultiplicationTable()

此方法将使用while循环,要求用户输入1到10之间的两个整数。如果用户提供的数字在指定范围内,则while循环将停止。否则,将打印一条错误消息,并要求用户输入另外两个数字。

用户给定的第一个数字将增加一个,然后用作行号,第二个数字将增加1,并用作二维数组的列号。该方法将计算乘法表并将其存储在数组中,然后显示出来。

例如,如果用户输入5和7,则您的代码应创建一个包含6行8列的int数组,然后使用乘法表创建并加载该数组。打印结果应如下所示:

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,并用作二维数组的列号。该方法将计算乘法表并将其存储在数组中,然后显示出来。

我似乎无法获得输入的数字来用作行和列的长度,并且打印输出最多可以打印十的倍数(尽管从技术上讲我猜是九,因为我没有使用+ 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 :(得分:0)

这是因为您声明表是要启动的10x10数组,然后在for循环中根据条件使用该数组的长度。在知道表的大小(或更改条件)之后,应该创建表。

答案 1 :(得分:0)

如果只是先要求用户输入,则可以设置数组大小以匹配用户输入,然后再定义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