1. 程式人生 > >上三角矩陣儲存為一維陣列

上三角矩陣儲存為一維陣列

壓縮矩陣  ,將矩陣儲存為一維矩陣,同時可以解壓縮 

其實題目記不太清了 。。。。剛剛開始做這道題的時候 ,我是用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);
		
	}
       
  
      
}