第66行c[rowA][colB] = c[rowA][colB] + a[rowA][colA]*b[colA][colB];
出现错误。我手工浏览了索引,只是无法弄清楚索引哪里出了问题。非常感谢您的帮助。
package arrayproducts;
import javax.swing.JOptionPane;
public class ArrayProducts {
public static void main(String[] args) {
String output = "";
int rowA = Integer.parseInt(JOptionPane.showInputDialog("\nEnter the number of rows for MatrixA."));
int colA = Integer.parseInt(JOptionPane.showInputDialog("\nEnter the number of columns for MatrixA."));
int rowB = Integer.parseInt(JOptionPane.showInputDialog("\nEnter the number of rows for MatrixB."));
int colB = Integer.parseInt(JOptionPane.showInputDialog("\nEnter the number of columns for MatrixB."));
if( colA != rowB){
output += "Cannot perform matrix operation: Inner matrix dimensions must agree.";
output += "\nMatrixA has a dimension of "+ rowA + " x " + colA + ".";
output += "\nMatrixB has a dimension of "+ rowB + " x " + colB + ".";
JOptionPane.showMessageDialog(null, output);
return;
} else {
output += "\nDot Product Begin:";
int [][] a = new int[rowA][colA];
output += "\nMatrixA has a dimension of "+ rowA + " x " + colA + ".";
int [][] b = new int[rowB][colB];
output += "\nMatrixA has a dimension of "+ rowB + " x " + colB + ".";
JOptionPane.showMessageDialog(null, output);
int [][] c = new int[rowA][colB];
////
// enter first matrix
for(int i = 0; i < rowA; i++){
for(int j = 0; j < colA; j++){
a[i][j] = Integer.parseInt(
JOptionPane.showInputDialog("\nEnter an integer for MatrixA, row " + (i+1) + " and column " + (j+1) + "."));
}
}
// add first matrix to output
output += "\nThe first matrix is: \n";
for(int i=0; i < rowA; i++){
for(int j=0; j < colA; j++){
output += " " + a[i][j];
}
output += "\n";
}
JOptionPane.showMessageDialog(null, output);
////
// enter second matrix
for(int i = 0; i < rowB; i++){
for(int j = 0; j < colB; j++){
b[i][j] = Integer.parseInt(
JOptionPane.showInputDialog("\nEnter an integer for MatrixB, row " + (i+1) + " and column " + (j+1) + "."));
}
}
// add second matrix to output
output += "\nThe second matrix is: \n";
for(int i=0; i < rowB; i++){
for(int j=0; j < colB; j++){
output += " " + b[i][j];
}
output += "\n";
}
JOptionPane.showMessageDialog(null, output);
////
// compute the product
for(int i = 0; i < rowA; i++){
for(int j = 0; j < colB; j++){
for(int k = 0; k < colA ; k++){ // either colA or rowB will work here
c[rowA][colB] = c[rowA][colB] + a[rowA][colA]*b[colA][colB];
}
}
}
output += "\nThe product of MatrixA and MatriB is:\n";
for(int i=0; i < rowA; i++){
for(int j=0; j < colB; j++){
output += " " + c[rowA][colB];
}
output += "\n";
}
JOptionPane.showMessageDialog(null, output);
}
}
}
答案 0 :(得分:1)
我想您打算在以下代码中使用索引i,j,k代替rowA,colB等。
c[rowA][colB] = c[rowA][colB] + a[rowA][colA]*b[colA][colB];
答案 1 :(得分:0)
我将向您展示一个简单的示例。
int[] a = new int[3];
这意味着a
只能有3个值。
a[0], a[1] and a[2]
如果您尝试a[3]
,它将超出范围。
所以。你有
int [][] c = new int[rowA][colB];
并尝试访问已超出范围的c[rowA][colB]
。
我认为,在您的三个for
循环中,您想使用i
,j
和k
。