創建一個【data.txt】,
上面是A矩陣,下面是B矩陣,中間用 ?個【=】來分割,如:
558 9 66 -5 11 6 -5 4 -8 9 ========================== 1 2 3 4 5 6 7 8 9 10 22 11 |
運行結果:
程式碼:
import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; public class yege { // 傳入【字串陣列】;回傳【int陣列】 static int[] INT_array(String[] s) { int[] i = new int[s.length]; for (int j = 0; j < i.length; j++) { i[j] = Integer.valueOf(s[j]); } return i; } // 列印矩陣(傳入int[][]) static void print(int[][] a) { for (int[] i : a) { for (int s : i) { System.out.print(s + "\t"); } System.out.println(""); } } // 列印矩陣(傳入ArrayList<int[]>) static void print(ArrayList<int[]> a) { for (int[] i : a) { for (int s : i) { System.out.print(s + "\t"); } System.out.println(""); } } // 計算矩陣相乘 static int[][] ji_suan(ArrayList<int[]> a, ArrayList<int[]> b) { int c[][] = new int[a.size()][b.get(0).length]; for (int k = 0; k < b.get(0).length; k++) { for (int i = 0; i < a.size(); i++) { for (int j = 0; j < a.get(i).length; j++) { c[i][k] += a.get(i)[j] * b.get(j)[k]; } } } return c; } public static void main(String[] args) throws Exception { BufferedReader data = new BufferedReader( new FileReader("src/data3.txt")); String s = ""; ArrayList<int[]> A = new ArrayList<int[]>(); ArrayList<int[]> B = new ArrayList<int[]>(); boolean pan = false;//判斷要存到A還是B for (int i = 0; (s = data.readLine()) != null; i++) {//讀取資料檔 if (pan)//存到B B.add(INT_array(s.split("[ ]"))); if (s.matches("[=]{0,50}")) //遇到[=]{0到50個},就換存到B pan = true; if (!pan)//存到A A.add(INT_array(s.split("[ ]"))); } int[][] C = ji_suan(A, B);// 計算矩陣A*B System.out.println("矩陣 A-------------"); print(A);// 列印A矩陣 System.out.println("\n矩陣 B-------------"); print(B); System.out.println("\n矩陣 A*B-------------"); print(C); } } |