[Java][資策會][LAB-2]陣列練習(多型改寫)

題目:分別建立xyz三個3*3的int陣列,然後將x,y的陣列加總存放到z陣列裡,最後將結果顯示在螢幕上

  • x,y陣列中的數字規定:必須是亂數產生0~30的數字
  • 使用多型

這個作業真的讓我一個頭兩個大。

不過學到很多

  1. 陣列型態宣告的時候變數裡裝的是陣列記憶體空間的址的值,為其他型態初值為null
  2. 二維陣列的宣告回傳型態為 int [][],double[][]......
  3. 宣告的變數不能使用多型,必須要用方法才能借過,因為變數宣告是預設是public static final
  4. 不在方法內,變數只能夠宣告不能夠做運算
  5. interface裡的引數也要寫的一模一樣
  6. 取名的時候不要使用到系統規定不能使用的字

這些看起來很容易但都是我的痛

思考進程:

  1. 創建ArrayInterface定規格,創建arrayX,arrayY,arrayZ  implements ArrayInterface,創建ArrayTest裡面有main方法一邊作一邊check
  2. 寫出產生亂數矩陣方法
  3. 寫出能夠印出矩陣方法
  4. 寫出矩陣相加方法
  5. 寫出矩陣內取值方法
  6. 在ArrayTest內創出陣列物件,透過多型使用方法產生出arrayX,arrayY,相加成arrayZ,並用sum方法算出arrayZ陣列總和

ArrayInterface

interface ArrayInterface {//宣告介面
		
public int[][] CreateRandomArray(int rowSize,int columSize);//定規格,用來產生亂數矩陣,回傳3*3矩陣
public int sum(int[][] arrayZ);//定規格把矩陣Z丟入作相加回傳int sum
public void display(int[][] arrayb);//定規格,將矩陣細節印出確認對錯			
public  int[][] combine(int[][] arrayX,int[][] arrayY);	//定規格,矩陣X和矩陣Y相加放入矩陣Z
}

 ArrayX ,ArrayY和ArrayZ只有名稱不一樣就不貼了

public class ArrayX implements ArrayInterface{//implements ArrayInterface
		
		
		public int[][] CreateRandomArray(int rowSize,int columSize){//產生亂數row*colum矩陣
				int [][] randomArray= new int[rowSize][columSize];//產生一個陣列空間size依照引數
				for(int i=0;i<rowSize;i++){//依序將亂數填入矩陣				
						for(int j=0;j<columSize;j++){
								int r = (int)(30*java.lang.Math.random());//亂數產生,因為是double型態要強制轉換至int
								randomArray[i][j]=r;
								}
				}return randomArray;//回傳矩陣
		}
			
		public  int sum(int[][] arrayZ){//將矩陣丟入回傳總和
				int	sum=0;
				for(int i=0;i<arrayZ.length;i++){//依序將array的值丟入sum	
					for(int j=0;j<arrayZ[i].length;j++){				
								sum += arrayZ[i][j];	
						}
				 }	return sum;
		}
		
		public void display(int[][] arrayb){	//印出矩陣每一個元素
				for(int k=0;k<arrayb.length;k++){				
					for(int l=0;l<arrayb[k].length;l++){
					 	int t=arrayb[k][l];
						System.out.print(t+"  ");
					}System.out.println();					
				
				}	
		}
		public  int[][] combine(int[][] arrayX,int[][] arrayY){//相加兩個矩陣
					int	sum=0;
					int[][] arrayZ=new int[3][3];
					for(int i=0;i<arrayZ.length;i++){										
					    for(int j=0;j<arrayZ[i].length;j++){
							arrayZ[i][j]=arrayX[i][j]+arrayY[i][j];
								  sum += arrayZ[i][j];	
						}
				    }return arrayZ;//回傳矩陣
		}
}

ArrayTest

public class ArrayTest{
		public static void main(String args[]) {
			 	int arrayX[][]= new int[3][3];			
			 	int arrayY[][]= new int[3][3];
			 	int arrayZ[][]= new int[3][3];
				
				System.out.println("我是陣列X");
				ArrayInterface x = new ArrayX();						
				arrayX= x.CreateRandomArray(3,3);
				x.display(arrayX);
				System.out.println("----------------");	
				
				System.out.println("我是陣列Y");
				ArrayInterface y = new ArrayY();						
				arrayY= y.CreateRandomArray(3,3);
				y.display(arrayY);
				System.out.println("----------------");
				
				System.out.println("我是陣列Z");
				ArrayInterface z = new ArrayZ();						
				arrayZ= z.combine(arrayX,arrayY);
				z.display(arrayZ);
				
				System.out.println("----------------");	
				int sum=z.sum(arrayZ);	
				System.out.println("我是總和"+sum);	
		}			
}