首页 > 解决方案 > 为什么这条线要打印两次?

问题描述

所以我在当地的高中帮助辅导代数 2 班,该班目前正在查看矩阵。虽然不在那里,但他们最终会得到矩阵的乘法。在去年学习了计算机科学并学习了 Java 之后,我帮助的老师认为我应该尝试为多个矩阵编写程序。

目前,我必须定义第一个数组的数字,该数组包含第一个矩阵的信息。不过,我有一个小问题。如图所示: 在此处输入图像描述

在已经记录整数之后,正在重复要求索引整数的行。我认为这是由于我的分层 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 工作版本。

标签: javaarraysdebuggingmatrixmatrix-multiplication

解决方案


我对矩阵乘法包不熟悉,所以我可能在这里漫无边际。

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

我不完全确定您拥有的外部 for 循环是什么,但是这个最外部的 for 循环会导致您要求索引 cols 的值比您想要的多倍。我觉得您最初想使用这个外部 for 循环来遍历每一行,并且不打算让第二个 for 循环遍历 cols 吗?

此外,凯文安德森在上面提到了这一点。如果您返回一个双整数数组,而不是将矩阵中的所有值存储在一个维度中,您可能会完全避免这个问题。我个人觉得这样会更有意义。

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


推荐阅读