我不了解以下分配的特定部分,为什么我的带有此分配的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
谢谢!
答案 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