添加矩阵

Adding Matrices

在这个程序中,我试图创建一个新方法,可以将创建的两个矩阵相加。为此,我需要检查矩阵是否具有相同的维度,然后打印出添加的矩阵。矩阵中填充了代码中设置的随机数。有人可以帮助创建一种方法,让我可以将其中两个相加吗?

public class Matrix {
    private int [][] grid;  
    
    /**
     * default constructor: creates 3x3 matrix with random values
     * in the range 0..9
     */
    public Matrix() {
        grid = new int[3][3];
        for(int x=0; x<3; x++)
            for(int y=0; y<3; y++)
                grid[x][y] = (int)(Math.random()*10);
    }
    
    /**
     * Creates matrix of specified size with random values 0..9
     * @param size positive integer that represents the number of rows
     * and columns in the matrix
     */
    public Matrix(int size) {
        grid = new int[size][size];
        for(int x=0; x<size; x++)
            for(int y=0; y<size; y++)
                grid[x][y] = (int)(Math.random()*10);
    }
    
    /** 
     * Creates a matrix of specified size with random values 0..9
     * @param rows number of rows in matrix
     * @param columns number of columns int matrix
     */
    public Matrix(int rows, int columns) {
        grid = new int[rows][columns];
        for(int x=0; x<rows; x++)
            for(int y=0; y<columns; y++)
                grid[x][y] = (int)(Math.random()*10);
    }
    
    /**
     * @return String formatted as an m x n matrix of m rows and 
     * n columns
     */
    public String toString() {
        int rows = grid.length;
        int columns = grid[0].length;
        String table = new String("");
        for(int x=0; x<rows; x++) {
            table = table + '|' + '\t';
            for(int y=0; y<columns; y++)
                table = table + grid[x][y] + '\t';
            table = table + '|' + '\n';
        }
        return table;
    }
    
    /**
     * @return true if number of rows equals number of columns
     */
    public boolean isSquare() {
        return grid.length == grid[0].length;
    }
    
    /**
     * @param other another matrix to compare to this one
     * @return true if this matrix and the other have the same
     * number of rows and columns
     */
    public boolean sameSize(Matrix other) {
        return grid.length == other.grid.length && 
                grid[0].length == other.grid[0].length;
    }
    // main method: for testing
    public static void main(String[] args) {
        
        Matrix m = new Matrix();
        Matrix n = new Matrix((int)(Math.random()*5)+2);
        Matrix o = new Matrix(((int)(Math.random()*5)+2),
                            ((int)(Math.random()*5)+2));
        System.out.println ("First matrix:");
        System.out.print(m);
        System.out.println ("Second matrix:");
        System.out.println(n);
        System.out.println ("Third matrix:");
        System.out.println(o);
        if(m.sameSize(n))
            System.out.println("First two are the same size");
        else
            System.out.println("First two are not the same size");
        if(o.isSquare())
            System.out.println("All three are square matrices");
        else
            System.out.println("Only first two are square matrices");      
    }
}

您首先检查矩阵的大小是否相同,然后将两个矩阵中的每个值一一相加,例如

public Matrix sum(Matrix other) {
    if (this.sameSize(other)) {
        Matrix result = new Matrix(this.grid.length, this.grid[0].length);
        for (int i=0; i<this.grid.length; i++) {
            for (int j=0; j<this.grid.length; j++) {
                result.grid[i][j] = this.grid[i][j] + other.grid[i][j];
            }
        }
        return result;
    } else {
        return null; // Can't sum those matrices
    }
}
public class Matrix {

    private final int[][] grid;
    private final int width;
    private final int height;

    public Matrix() {
        this(3);
    }

    public Matrix(int size) {
        this(size, size);
    }

    public Matrix(int rows, int cols) {
        grid = createGrid(rows, cols);
        width = cols;
        height = rows;
    }

    @Override
    public String toString() {
        StringBuilder buf = new StringBuilder();
        buf.append('[');

        for (int row = 0; row < grid.length; row++) {
            if (buf.length() > 1)
                buf.append(',');

            buf.append('[');

            for (int col = 0; col < grid[row].length; col++) {
                if (col > 0)
                    buf.append(',');
                buf.append(grid[row][col]);
            }

            buf.append(']');
        }

        return buf.append(']').toString();
    }

    public boolean isSquare() {
        return width == height;
    }

    public boolean isSameSize(Matrix m) {
        return m != null && width == m.width && height == m.height;
    }

    public void add(Matrix m) {
        if (!isSameSize(m))
            return;

        for (int row = 0; row < grid.length; row++)
            for (int col = 0; col < grid[row].length; col++)
                grid[row][col] += m.grid[row][col];
    }

    private static int[][] createGrid(int rows, int cols) {
        Random random = new Random();
        int[][] grid = new int[rows][cols];

        for (int row = 0; row < grid.length; row++)
            for (int col = 0; col < grid[row].length; col++)
                grid[row][col] = random.nextInt(10);

        return grid;
    }

    public static void main(String... args) {
        Random random = new Random();
        Matrix m = new Matrix();
        Matrix n = new Matrix(random.nextInt(7));
        Matrix o = new Matrix(random.nextInt(7), random.nextInt(7));
        System.out.println("First matrix:");
        System.out.print(m);
        System.out.println("Second matrix:");
        System.out.println(n);
        System.out.println("Third matrix:");
        System.out.println(o);

        if (m.isSameSize(n))
            System.out.println("First two are the same size");
        else
            System.out.println("First two are not the same size");

        if (o.isSquare())
            System.out.println("All three are square matrices");
        else
            System.out.println("Only first two are square matrices");

        n.add(o);
        System.out.println(n);
    }
}

将此添加到矩阵 class:

/**
 * Creates a new Matrix with the values of 
 * both Matrix(s) added together.
 * @param otherMatrix The Matrix to be added.
 * @return The new Matrix.
 */
public Matrix add(Matrix otherMatrix) {
    if (sameSize(otherMatrix)) {
        Matrix newMatrix = new Matrix(grid.length, grid[0].length);
        for (int x = 0; x < grid.length; x++) {
            for (int y = 0; y < grid[0].length; y++) {
                newMatrix.grid[x][y] = grid[x][y] + otherMatrix.grid[x][y];
            }
        }
        return newMatrix;
    } else {
        throw new Error("The Matrix(s) aren't the same size.");
    }
}

然后调用它:

Matrix addedMatrix = matrix.add(otherMatrix);