【问题标题】:Why is this line printing twice?为什么这条线要打印两次?
【发布时间】:2019-04-16 23:04:02
【问题描述】:

所以我在当地高中帮助辅导代数 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 工作版本。

【问题讨论】:

  • 您是否意识到您可以在 Java 中使用 int[][]?对于行j、列k 的项目,写numb[j][k] 而不是numb[j * cols + k] 要方便得多。
  • 在任何情况下,您都不需要额外的循环嵌套级别。第一级遍历行,接下来遍历列,第三级遍历行再次

标签: java arrays debugging matrix matrix-multiplication


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2016-11-01
    相关资源
    最近更新 更多