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