为什么此行打印两次?

时间:2018-11-14 02:43:23

标签: java arrays debugging matrix matrix-multiplication

因此,我在当地的高中帮助辅导Algebra 2班,该班级目前正在学习矩阵。尽管不存在,但它们最终将实现矩阵乘法。去年上了计算机科学并学习了Java之后,我帮助的老师认为我应该尝试针对多个矩阵编写程序。

目前,我要定义第一个数组的数字,该数组保存第一个矩阵的信息。但是,我有一个小问题。如下图所示: enter image description here

要求索引整数的行在已经记录整数之后重复进行。我认为这是由于我分层的for循环引起的,但我不能确定。通常,新手会看到问题更清晰。任何可以帮助我的人都会感激不尽。

代码:

package matrixmultiplication;
import java.util.*;

public class MatrixMultiplication {

public static void main(String[] args) {
    System.out.println("What is the size of the first matrix?");
    int matrix1Rows = matrixRows();
    int matrix1Columns = matrixColumns();
    int[] matrix1 = new int[matrix1Rows * matrix1Columns];
    doubleSpace();
    System.out.println("What is the size of the second matrix?");
    int matrix2Rows = matrixRows();
    int matrix2Columns = matrixColumns();
    int[] matrix2 = new int[matrix2Rows * matrix2Columns];
    doubleSpace();
    if (matrix1Columns != matrix2Rows){
        System.out.println("These cannot be multiplied!");
        System.exit(0);
    } else {
        matrix1Numbers(matrix1Rows, matrix1Columns);
    }
}

public static int matrixRows(){
    System.out.print("Rows:");
    Scanner rowSc = new Scanner(System.in);
    int rows = rowSc.nextInt();
    return rows;
}

public static int matrixColumns(){
    System.out.print("Columns:");
    Scanner colSc = new Scanner(System.in);
    int cols = colSc.nextInt();
    return cols;
}

public static int[] matrix1Numbers(int rows, int cols){
    int[] numb = new int[rows * cols];
    for (int j = 0; j <= numb.length; j += rows){
        for (int i = 1; i <= cols; i++){
            for (int k = 1; k <= rows; k++){
                System.out.println("What is the value for index (" + k + "," + i + ")?");
                Scanner inp = new Scanner(System.in);
                if (j + k <= numb.length){
                    numb[j + k - 1] = inp.nextInt();
                }
            }
        }
    }
    for (int i = 0; i < numb.length; i++){
        System.out.println(numb[i]);
    }
    return numb;
}

public static void doubleSpace(){
    System.out.println();
    System.out.println();
}

}

我使用NetBeans 8.2和适用于NetBeans的Java的最新工作版本。

1 个答案:

答案 0 :(得分:0)

我对矩阵乘法包不熟悉,所以我可能在这里闲逛。

for (int j = 0; j <= numb.length; j += rows){

我不确定您的外部for循环是什么用途,但是这个最外部的for循环使您要求的索引cols值比您想要的多。 我觉得您最初想使用此外部for循环遍历每行,也许不打算让第二个for循环遍历cols吗?

此外,凯文·安德森(Kevin Anderson)也在上面提到了这一点。如果返回一个double int数组而不是将所有值存储在一个维度中,则可能会完全避免此问题。我个人认为这会更有意义。

只是挑剔,但每次您想以其他方式使用扫描仪时,我都不会制造新的扫描仪。您可以在类的顶部创建一个字段,在您的main方法中实例化一次,然后使用扫描器将它作为参数传递给所有方法。