这是它应该如何工作,我把put放入第一个数组,如:2 3 1 2 3 4 5 6然后2和3是行和列,其余是值。问题是第一个数组工作,但是当我到达EOF(ctrl + z)时,则出现了超出范围的异常。这意味着我不能像第一个那样输入第二个数组的值。我知道还有另外一种情况,我可以先声明数组大小然后再为值。但是我怎么能解决这个问题呢?我仍然想要使用StdIn.readAllInts()吗?
public class MatrixMult {
public static void main(String[] args){
System.out.println("First Matrix Config");
int[] einGabeMatrix1= StdIn.readAllInts();
int zeileM1 = einGabeMatrix1[0];
int spalteM1 = einGabeMatrix1[1];
int[][] ersteMatrix= new int [zeileM1][spalteM1];
int k=2;
int sum;
for(int i=0;i<zeileM1-1;i++){
for(int j=0;j<spalteM1-1;j++){
ersteMatrix[i][j]=einGabeMatrix1[k];
k++;
}
}
System.out.println("Second Matrix Config");
int[] einGabeMatrix2 = StdIn.readAllInts();
int zeileM2 = einGabeMatrix2[0];
int spalteM2 = einGabeMatrix2[1];
int h=2;
int[][] zweiteMatrix= new int [zeileM2][spalteM2];
for(int m=0;m<zeileM2-1;m++){
for(int n=0;n<spalteM2-1;n++){
zweiteMatrix[m][n]=einGabeMatrix2[h];
h++;
}
}
int[][] ergebnisMatrix= new int [zeileM1][spalteM2];
for (int t = 0; t < zeileM1; t++) {
for (int c = 0; c < spalteM2; c++) {
sum = 0;
for (int d = 0; d < spalteM1; d++) {
sum = sum + ersteMatrix[t][d] * zweiteMatrix[d][c];
}
ergebnisMatrix[t][c] = sum;
}
}
for(int i=0;i<zeileM1;i++){
for(int j=0;j<spalteM1;j++){
System.out.println(ergebnisMatrix[i][j]);
}
}
}
} //这是StdIn.readAllInts(),java的标准方法。
public static int[] readAllInts() {
String[] fields = readAllStrings();
int[] vals = new int[fields.length];
for (int i = 0; i < fields.length; i++)
vals[i] = Integer.parseInt(fields[i]);
return vals;
}
答案 0 :(得分:0)
看起来这个问题来自StdIn.readAllInts()
读到EOF的事实。在代码进入第二次调用时,将无法读取任何值。
我建议改为使用StdIn.readInt()
调用一次读取一个整数,然后您可以在循环中使用它来读取您需要的确切数值。
以下是如何获得前2个整数来查找矩阵大小的示例:
int zeileM1 = StdIn.readInt();
int spalteM1 = StdIn.readInt();
您还需要在for循环中应用此方法,以将数据读入矩阵。