如何使用带有Std.readAllInts()的用户输入创建2数组

时间:2017-11-21 20:30:46

标签: java arrays input

这是它应该如何工作,我把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;
}

1 个答案:

答案 0 :(得分:0)

看起来这个问题来自StdIn.readAllInts()读到EOF的事实。在代码进入第二次调用时,将无法读取任何值。

我建议改为使用StdIn.readInt()调用一次读取一个整数,然后您可以在循环中使用它来读取您需要的确切数值。

以下是如何获得前2个整数来查找矩阵大小的示例:

int zeileM1 = StdIn.readInt();
int spalteM1 = StdIn.readInt();

您还需要在for循环中应用此方法,以将数据读入矩阵。