因为学到了线性代数,所以想尝试自己不看有关这方面的java代码相关资料,根据线性代数的矩阵原理写一个两个矩阵进行相乘的java代码,最终还是手搓出来了
class Matrix{
public static int[][] matrix(){ //matrix:矩阵
Scanner scanner = new Scanner(System.in);
System.out.printf("请输入要生成矩阵的行数m:");
int matrixLine = scanner.nextInt();
System.out.printf("请输入要生成矩阵的列数n:");
int matrixColumns = scanner.nextInt();//columns:列数
int[][] matrix = new int[matrixLine][matrixColumns];//创建一个矩阵1的行数与矩阵2的列数的数组矩阵
for (int i = 0; i < matrixLine; i++) {//表示数组矩阵的第i行
for (int j = 0; j < matrixColumns; j++) {//表示数组矩阵的第j列
System.out.printf("请输入第"+(i+1)+"行"+"第"+(j+1)+"列的数字:");
matrix[i][j] = scanner.nextInt();//让用户输入第(i+1)行第(j+1)列的数字
}
}
showMatrix(matrix);//将用户自定义的数组矩阵显示出来
return matrix;//将数组矩阵返回,让用户创建数组矩阵对象的时候进行接收,从而得到用户自定义的数组矩阵
}
public static void showMatrix(int[][] matrix){
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.printf(matrix[i][j]+"\t");
}
System.out.println();
}
}
public static int[][] matrixMultiplication(int[][] matrix1,int[][] matrix2){//让用户将创建好的两个矩阵传进来
if (matrix1[0].length != matrix2.length){//如果矩阵1的列数与矩阵2的行数不相等,则无法计算
System.out.println("请注意矩阵的计算法则,要求输入第一个矩阵的列数等于第二个矩阵的行数,否则无法计算");
System.out.println("请您重新运行一次矩阵");
}
int[][] receiveMatrix = new int[matrix1.length][matrix2[0].length];//创建一个数组矩阵对即将进行矩阵运算的结果进行接收
for (int i = 0; i < matrix1.length; i++) {//用i表示接收矩阵1的第i行,最大索引长度为矩阵1的行数
for (int j = 0; j < matrix2[0].length; j++) {//用j表示接收矩阵和计算矩阵的第j列,最大索引长度为矩阵2的列数
for (int k = 0; k < matrix1[0].length; k++) {//k作为中间过渡的矩阵1的列数和矩阵2的行数,最终会约掉
receiveMatrix[i][j] += matrix1[i][k] * matrix2[k][j];
/*
receiveMatrix[i][j]:接收矩阵的第i行第j列的元素为其矩阵1第i(暂时不变)行第k列(变)的所有元素
与其矩阵2的第k行(k变)第j列(暂时不变)的所有对应元素之积的和
eg:
当计算接收矩阵的第1行第2列元素的结果时,此时,i=0,j=1,表示第1行的第二个元素,其计算为:
矩阵1的第一行i在k的一轮中保持不变,i = 0,k = 0,1,2 --表示矩阵1上第1行上的所有元素
矩阵2的第二列j在k的一轮中保持不变,j = 1,k = 0,1,2 --表示矩阵2上第2列上的所有元素
表示矩阵1上第1行对应的所有元素 ✖ 表示矩阵2上第2列对应的所有元素 再加起来则表示 接收矩阵的第一行第二个元素的结果了
*/
}
}
}
System.out.println("矩阵的演算结果为:");
showMatrix(receiveMatrix);
return receiveMatrix;
}
}
class Test{
public static void main(String[] args) {
int[][] matrix1 = Matrix.matrix();
int[][] matrix2 = Matrix.matrix();
Matrix.matrixMultiplication(matrix1,matrix2);
}
}
请输入要生成矩阵的行数m:3
请输入要生成矩阵的列数n:4
请输入第1行第1列的数字:2
请输入第1行第2列的数字:6
请输入第1行第3列的数字:4
请输入第1行第4列的数字:5
请输入第2行第1列的数字:3
请输入第2行第2列的数字:1
请输入第2行第3列的数字:8
请输入第2行第4列的数字:9
请输入第3行第1列的数字:7
请输入第3行第2列的数字:6
请输入第3行第3列的数字:2
请输入第3行第4列的数字:5
2 6 4 5
3 1 8 9
7 6 2 5
请输入要生成矩阵的行数m:4
请输入要生成矩阵的列数n:5
请输入第1行第1列的数字:2
请输入第1行第2列的数字:6
请输入第1行第3列的数字:4
请输入第1行第4列的数字:3
请输入第1行第5列的数字:1
请输入第2行第1列的数字:8
请输入第2行第2列的数字:9
请输入第2行第3列的数字:7
请输入第2行第4列的数字:6
请输入第2行第5列的数字:4
请输入第3行第1列的数字:2
请输入第3行第2列的数字:1
请输入第3行第3列的数字:6
请输入第3行第4列的数字:5
请输入第3行第5列的数字:4
请输入第4行第1列的数字:8
请输入第4行第2列的数字:9
请输入第4行第3列的数字:7
请输入第4行第4列的数字:3
请输入第4行第5列的数字:2
2 6 4 3 1
8 9 7 6 4
2 1 6 5 4
8 9 7 3 2
矩阵的演算结果为:
100 115 109 77 52
102 116 130 82 57
106 143 117 82 49
Process finished with exit code 0
刚自学java没多久,浅浅记录一下