【问题标题】:How can I export matrix from user input to other class as a two-dimensional array?如何将矩阵从用户输入导出到其他类作为二维数组?
【发布时间】:2021-02-05 09:46:37
【问题描述】:

所以我写了一个方法来根据用户输入生成一个矩阵,如下所示:

public class matrix1 {
    public static void getMatrix() {
    Scanner scan = new Scanner(System.in);
        
        System.out.println("Please enter the number of matrix rows. ");
         
        int matrixRow;
        
        do {
            System.out.println("Please enter valid number.");
            matrixRow = scan.nextInt()  ;
            } while (matrixRow>4);
        
         
        System.out.println("Please enter the number of matrix columns.");
        int matrixCol;
        do {
            System.out.println("Please enter valid number.");
            matrixCol = scan.nextInt()  ;
            } while (matrixCol>4);
               
        //defining 2D array to hold matrix data
        int[][] matrix1 = new int[matrixRow][matrixCol];
        
        enterMatrixData(scan, matrix1, matrixRow, matrixCol);
        
        // Print Matrix Data
        printMatrix(matrix1, matrixRow, matrixCol);
  }
  public static void enterMatrixData(Scanner scan, int[][] matrix, int matrixRow, int matrixCol){
     System.out.println("Please enter data for your matrix.");
          
          for (int i = 0; i < matrixRow; i++)
          {
              for (int j = 0; j < matrixCol; j++)
              {
                  matrix[i][j] = scan.nextInt();
              }
          }
  }
  
  public static void printMatrix(int[][] matrix, int matrixRow, int matrixCol){
    System.out.println("Your matrix is : ");
        
        for (int i = 0; i < matrixRow; i++)
        {
            for (int j = 0; j < matrixCol; j++)
            {
                System.out.print(matrix[i][j]+"\t");
            }
             
            System.out.println();
        }
  }

它就像一个魅力,但我是一个完全的初学者,现在我想使用这个创建的数组将它乘以一个标量。在我的主要方法中,我调用了

matrix1.getMatrix();

乘法方法在另一个类中。我可以导入这个用户制作的数组并在乘法类中使用它吗?

【问题讨论】:

    标签: java arrays matrix


    【解决方案1】:

    只需将返回类型改为int[][]并在最后一行添加return语句即可:

    public int[][] getMatrix() {
       // ... you already got all this
       return matrix1;
    }
    

    然后你的 main 可以调用它:

    public static void main(String[] args) {
        int[][] matrix = getMatrix();
        // now you can just pass it to your multiplier as a parameter, e.g.:
        MatrixMultiplier.multiplyWithScalar(matrix, 2);
    }
    

    不过,我会将您的 getMatrix 重命名为 readMatrix 之类的名称,因为有一个约定,名为 get[SomeFieldName] 的方法应该是简单的访问器函数,通常不会做很多工作。


    然而,更好的设计是将原始数组包装为矩阵类的成员:

    class Matrix {
        private final int[][] data;
        
        private Matrix(int[][] data) {
            this.data = data;
        }
        
        public static Matrix fromUserInput() {
            int[][] matrix1;
            // code for reading from input here
            return new Matrix(matrix1);
        }
    }
    

    并让您的 Multiplier 接受您的 Matrix 类的实例:

    public static void main(String[] args) {
        Matrix matrix = Matrix.fromUserInput();     
        MatrixMultiplier.multiplyWithScalar(matrix, 2);
    }
    

    当然,现在您的矩阵类需要提供获取和设置特定索引处的字段值的方法。

    【讨论】: