代码如下:
package exer;
import java.util.Scanner;
public class test3 {
public static void main(String[] args) {
System.out.println("请输入一个数:");
Scanner scanner = new Scanner(System.in);
int sc = scanner.nextInt();
int a = 0;
//sc += 1;
int[][] arr = new int[][]{{0, 1, 2, 5},
{1, 2, 1, 0},
{1, 0, 0, 1},
{0, 8, 9, 0}};
int[][] arr2 = new int[4][4];
int[][] arr3 = new int[4][4];
while (a < sc) {
a++;
//先得到二次幂,
if(a == 1){
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
arr2[i][j] = arr[i][j];
}
}
}
for (int i = 0; i < arr3.length; i++) {
for (int j = 0; j < arr3[i].length; j++) {
arr3[i][j] = arr2[i][0] * arr[0][j]
+ arr2[i][1] * arr[1][j]
+ arr2[i][2] * arr[2][j]
+ arr2[i][3] * arr[3][j];
}
}
if(a > 1){
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
arr2[i][j] = arr3[i][j];//将前面的结果作为一个整体
}
}
}else {
for (int i = 0; i < arr3.length; i++) {
for (int j = 0; j < arr3[i].length; j++) {
arr3[i][j] = arr[i][j];
}
}
}
}
System.out.println( sc + "阶矩阵为:");
for (int i = 0; i < arr3.length; i++) {
for(int j = 0;j < arr3[i].length;j++){
System.out.print(arr3[i][j]);
System.out.print(" ");
if(j % 3 == 0 && j != 0){
System.out.println("\n");
}
}
}
}
}
核心代码:
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr2[i].length; j++) {
arr2[i][j] = arr3[i][j];//将前面的结果作为一个整体
}
}
即将前n个矩阵的乘积作为一个整体赋值给arr2。
具体步骤:
a++是为跳出循环做准备。
首先给arr2赋值为arr1,为2次幂做准备。
再通过if ……else……判断要求的幂的次数是否大于1,大于1才可以进行累乘。
当a自加到a == sc 时就能跳出循环。
矩阵的乘法代码公式可以简写成:
for (int i = 0; i < arr3.length; i++) {
for (int j = 0; j < arr3[i].length; j++) {
arr3[i][j] = 0;
for(int k = 0;k < arr3[i].length;k++){
arr3[i][j] += arr2[i][k] * arr[k][j];
}
}
}
当然这不一定是最好的实现方式。仅提供一种思路。
如果有其它实现方法,欢迎沟通交流。