上三角矩陣儲存為一維陣列
阿新 • • 發佈:2019-02-11
壓縮矩陣 ,將矩陣儲存為一維矩陣,同時可以解壓縮
其實題目記不太清了 。。。。剛剛開始做這道題的時候 ,我是用n*n矩陣來儲存資料 ,然後定義了一個壓縮方法和解壓方法,交完作業老師說,這道題的原意不是這樣。。。。。。你應該是用一個一維陣列儲存資料,這樣才能達到節省空間的目的,然後輸出的時候顯示式n*n的矩陣。。。。然後我又重新改了,以下是我的答案,如有錯誤,新增微信macforyou1。
Matrix.java
public class Matrix { int r; int c; int[] values;//定義一個一維陣列儲存元素 public Matrix() { r = 1; c = 1; values = new int[1]; values[0] = 1;//定義的建構函式為1*1矩陣,預設值為0 } public Matrix(int r, int c, int[] values) { super(); this.r = r; this.c = c; this.values = values; }
//將一維陣列解壓縮為上三角矩陣
public static void recover(Matrix b) throws Exception{
int length = b.values.length;
int n = (int) Math.sqrt(2 * length);
int[][] a = new int[n][n];
for (int i = 0, k = 0; i <n; i++)
{
for (int j = 0; j <= i; j++, k++)
{
a[i][j] = b.values[k];
}
}
show2(a);
}
public Matrix add( Matrix y) { int n = y.values.length; int[] z = new int[n]; if (this.values.length != y.values.length) {System.out.println("兩個矩陣大小不一樣無法相加"); } else {for (int i = 0; i < n; i++) {z[i] = this.values[i] + y.values[i];}} Matrix m=new Matrix(1, this.values.length, z); return m;} //將儲存的一維陣列輸出 public static void show1(Matrix m) { for(int i = 0; i < m.values.length; i++) { System.out.print("\t"+m.values[i]);}System.out.println();} //將儲存的一維陣列以矩陣n*n矩陣形式輸出, public static void show2(int[][] array) {for (int i = 0; i < array.length;i++) {for (int j = 0; j < array[i].length; j++) { System.out.print("\t"+array[i][j]);} System.out.println();} } }
然後定義一個MatrixTest類來測試
import java.util.zip.ZipEntry; import org.omg.CosNaming.NamingContextExtPackage.AddressHelper; public class Matrixtest { public static void main(String[] args) throws Exception { Matrix m=new Matrix(); m.show1(m); int[] values1={1,2,3,4,5,6}; Matrix m1=new Matrix(1, values1.length, values1); // m1.show1(m1); int[] values2={2,3,4,5,6,7}; Matrix m2=new Matrix(1, values2.length, values2); m2.show1(m2); m2.recover(m2); Matrix m3=m1.add(m2); m3.show1(m3); } }