50,527
社区成员
发帖
与我相关
我的任务
分享
import java.util.Arrays;
import java.util.Random;
public class Matrix {
public static final int ALL_ZERO = 0;
public static final int ALL_ONE = 1;
public static final int ALL_RANDOM = 2;
private int M;
private int N;
private int[] data;
public Matrix(int M,int N,int Way) throws ParamsError{
this.M = M;
this.N = N;
data = new int[M * N];
switch (Way) {
case ALL_ZERO:
Arrays.fill(data, 0);
break;
case ALL_ONE:
Arrays.fill(data, 1);
break;
case ALL_RANDOM:
for (int i = 0; i < data.length; i++) {
//为了便于观察运算的正确性,限制范围为0 ~ 9
data[i] = new Random().nextInt(10);
}
break;
default:
throw new ParamsError("初始化矩阵的参数有误,只是能是全0,全1,随机中的一种");
}
}
public Matrix addMatrix(Matrix matrix) throws ParamsError{
if (this.M != matrix.M || this.N != matrix.N) {
throw new ParamsError("矩阵初始化错误:两矩阵大小不相等");
}
for (int i = 0; i < data.length; i++) {
this.data[i] += matrix.data[i];
}
return this;
}
public Matrix mutiMatrix(Matrix matrix) throws ParamsError{
if (this.N != matrix.M) {
throw new ParamsError("矩阵乘法错误:第一举证的行和第二矩阵的列大小不相等,无法相乘 ");
}
Matrix tempMatrix = new Matrix(M, matrix.N, ALL_ZERO);
for (int i = 0; i < M; i++) {
for (int j = 0; j < matrix.N; j++) {
int sum = 0;
for (int j2 = 0; j2 < N; j2++) {
sum += this.data[i * N + j2] * matrix.data[j2 * matrix.N + j];
}
tempMatrix.data[i * matrix.N + j] = sum;
}
}
return tempMatrix;
}
public void publishMatrix(){
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+" ");
if (i != 0 && i % N == (N - 1)) {
System.out.println();
}
}
}
public static class ParamsError extends Exception{
private static final long serialVersionUID = 1L;
public ParamsError(String info){
super(info);
}
}
public static void main(String[] args) {
try {
Matrix matrix1 = new Matrix(2,3,Matrix.ALL_RANDOM);
System.out.println("矩阵1:");
matrix1.publishMatrix();
Matrix matrix2 = new Matrix(3,4,Matrix.ALL_RANDOM);
System.out.println();
System.out.println("矩阵2:");
matrix2.publishMatrix();
Matrix matrix = matrix1.mutiMatrix(matrix2);
System.out.println();
System.out.println("结果:");
matrix.publishMatrix();
} catch (ParamsError e) {
e.printStackTrace();
}
}
}
class Square extends Matrix implements Runnable{
public Square(int N, int Way) throws ParamsError {
super(N, N, Way);
}
@Override
public void run() {
//真不知道你一个方阵实现多线程为了干什么!
}
}