加矩阵

问题描述

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

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
    }
}
,

将其添加到Matrix类:

/**
 * 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);
,
struct Provider: IntentTimelineProvider {
    let networkManager = NetworkManager()
    func placeholder(in context: Context) -> SimpleEntry {
        SimpleEntry(date: Date(),configuration: ConfigurationIntent(),clubname: networkManager.clubName)
    }
    
    func getSnapshot(for configuration: ConfigurationIntent,in context: Context,completion: @escaping (SimpleEntry) -> ()) {
        let entry = SimpleEntry(date: Date(),configuration: configuration,clubname: networkManager.clubName)
        completion(entry)
    }
    
    func getTimeline(for configuration: ConfigurationIntent,completion: @escaping (Timeline<Entry>) -> ()) {
        var entries: [SimpleEntry] = []
        
        // Generate a timeline consisting of five entries an hour apart,starting from the current date.
        let currentDate = Date()
        for hourOffset in 0 ..< 5 {
            let entryDate = Calendar.current.date(byAdding: .hour,value: hourOffset,to: currentDate)!
            let entry = SimpleEntry(date: entryDate,clubname: networkManager.clubName)
            entries.append(entry)
        }
        
        //wie oft geupdatet werden soll
        
        let nextUpdate = Calendar.current.date(byAdding: .hour,value: 1,to: Date())
        
        let timeline = Timeline(entries: entries,policy: .after(nextUpdate))
        completion(timeline)
    }
}