转圈显示的Java程序和两矩阵相乘
1.轉圈顯示的Java程序,將N x N的方陣轉圈賦值并顯示輸出。如圖:N=8,8x8方陣轉圈填數結果。
解析:這是一個依靠矩陣中每個元素的下標對其進行操作的典型事例。其要求將1~NXN之間的整數按照從外向里的順時針方向將其放入其中,并顯示輸出。
文件名:
RotatitonClass.java
下面是這個程序的代碼:
package javaapplication1;
public class RotatitonClass {
??? public static final int N=8;?? //方陣的大小
??? public static void main(String[] args) {
??????? int[][] m = new int[N][N];? //創建N x N的方陣
??????? rotating(m,N);????????????? //向方陣中填寫數值
??????? printSquareMatrix(m,N);???? //顯示方陣
?????? }
??? public static void rotating(int[][] m,int num)? //向方向中填寫數值
??? {
??????? int k = 1;????????????????? //將要填寫的數值
??????? for (int i = 0; i<=num/2;i++)? //將要填寫的圈數
??????? {
??????????? for (int j=i;j<num-i;j++)? //上方行方向
??????????? {
??????????????? m[i][j]=k++;
??????????? }
??????????? for (int j=i+1;j<num-i;j++)? //右側列方向
??????????? {
??????????????? m[j][num-i-1]=k++;
??????????? }
??????????? for (int j=num-i-2;j>=i;j--)? //下方行方向
??????????? {
??????????????? m[num-i-1][j]=k++;
??????????? }
??????????? for (int j=num-i-2;j>i;j--)? //左側方向
??????????? {
??????????????? m[j][i]=k++;
??????????? }
??????? }
??? }
??? public static void printSquareMatrix(int[][] m,int num) //顯示方陣
??? {
??????? System.out.println();
??????? for (int i=0;i<num;i++)
??????? {
??????????? for (int j=0;j<num;j++)
??????????? {
??????????????? System.out.printf("%4d", m[i][j]);
??????????? }
??????????? System.out.println();
??????? }
??? }
}
在上述小Java程序中,除main主函數外,還定義了2個成員函數,成員函數rotating用于實現按照要求為方陣轉圈填數的操作;成員函數printSquareMatrix用于顯示方陣。
?? 成員函數rotating是這個程序的核心,它采用每次循環一次填寫一圈的算法將NxN個整數填入方陣中。具體做法是從外向內依次填寫每圈的內容,每圈按照上、右、下、左的順時針順序填寫。每圈需要填寫的元素數量由方陣大小(num)和圈數(i)決定。
2.? 利用二維數組表示矩陣,并實現兩個矩陣相乘的操作。
解析:矩陣可以用來表示統計數據等方面的各種有關聯的數據。在數學上,矩陣可以是由方程組的系數及常數構成的方陣。在矩陣的運算中,要求兩個相乘的矩陣必須滿足第1個矩陣的列數等于第2個矩陣的行數。即對于 Am1×n1和Bm2×n2,要求n1=m2,且結果矩陣C的行列數為m1×n2,其中的每個元素內容為
?
文件名:Matrix.java
一下是程序的代碼:
package javaapplication3;
public class Matrix {
??? public static final int M1 = 8; //第1個矩陣的行數
??? public static final int N1 = 5; //第1個矩陣的列數
??? public static final int M2 = 5; //第2個矩陣的行數
??? public static final int N2 = 6; //第2個矩陣的列數
??? public static void main(String[] args) {
??????? int [][] a =new int[M1][N1]; //創建第1個矩陣
??????? int [][] b =new int[M2][N2]; //創建第2個矩陣
??????? enterMatrix(a,M1,N1);?? //輸入第1個矩陣
??????? enterMatrix(b,M2,N2);?? //輸入第2個矩陣
??????? printMatrix(a,M1,N1);?? //顯示第1個矩陣
??????? printMatrix(b,M2,N2);?? //顯示第2個矩陣
??????? if (N1==M2)
??????? {
??????????? int[][] c = new int[M1][N2];
??????????? MulMatrix(a,M1,N1,b,M2,N2,c);
??????????? printMatrix(c,M1,N2);
??????? }
????? }
public static void enterMatrix(int[][] m, int row, int col) {? //輸入矩陣
????? for (int i = 0; i < row; i++) {
??????????? for (int j = 0; j < col; j++) {
??????????????? m[i][j] = (int) Math.round(Math.random() * 10);
??????????? }
???? }}
public static void printMatrix(int[][] m, int row, int col) {? //顯示矩陣
????????? System.out.println();
??????? for (int i = 0; i < row; i++) {
??????????? for (int j = 0; j < col; j++) {
??????????????? System.out.printf("%4d",m[i][j]);
??????????? }
??????????? System.out.println();
??????? }
??????? System.out.println();
?}
//兩矩陣相乘
public static void MulMatrix(int[][] a, int row1, int col1, int[][] b, int row2, int col2, int[][] c) {
for (int i = 0; i < row1; i++) {
??????????? for (int j = 0; j < col2; j++) {
??????????????? c[i][j] = 0;
??????????????? for (int k = 0; k < col1; k++) {
??????????????????? c[i][j] += a[i][k] * b[k][j];
??????????????? } } }
?}
}
運行效果:
第1個矩陣
?
第2個矩陣
?
兩矩陣之乘積
?? ?上述程序中,除main函數外,還定義了3個成員函數,成員函數enterMatrix用于實現為矩陣賦值的操作;成員函數printMatrix用于顯示矩陣;成員函數MulMatrix用于實現兩個矩陣相乘的操作。
? ?在成員函數enterMatrix中,為了避免調試程序時需要輸入大量數據所帶來的麻煩,利用Math類中提供的random這個隨機函數產生0~1之間的數值,并經過乘以10再四舍五入的處理,映射為0~10之間的整數,以此模擬鍵盤的輸入,這是在調試程序時經常用到的手段。(在里我們也可根據需要自己輸入)
?? 在成員函數printMatrix中,給出的是顯示矩陣的常規格式,即外層控制行的輸出,內層循環控制烈的輸出,每行的內容輸出完畢后執行一條換行語句,以此達到矩陣內容按照行列格式輸出。
?? 在成員函數MulMatrix中,利用三重循環實現了兩個矩陣相乘的操作,這也是一種常規的書寫格式。
轉載于:https://blog.51cto.com/linuxme/391339
總結
以上是生活随笔為你收集整理的转圈显示的Java程序和两矩阵相乘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读《差距在哪里,你与开发高手的距离到底有
- 下一篇: 思科网络技术学院CCNA教程