[英]Java - A 2D Array Multiplication Table with user input has too many rows and columns
我不了解以下分配的特定部分,為什么我的帶有該分配的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,並將其用作二維數組的列號。 該方法將計算乘法表並將其存儲在數組中,然后顯示它。
我似乎無法獲得輸入的數字來用作行和列的長度,並且打印輸出最多可以打印10的倍數(盡管從技術上講我猜是9,因為我沒有使用+ 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
謝謝!
這是因為您聲明表是要開始的10x10數組,然后在for循環中根據條件使用該數組的長度。 在知道表的大小(或更改條件)之后,應創建表。
如果您只是先要求用戶輸入,則可以設置數組大小以匹配您的用戶輸入,然后再定義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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.