Try   HackMD

Java第13週[JPA503~505 %02d、陣列指定初始值+函數運用、費氏數列、反轉陣列]

複習用

開始解題(JPA503~505):

第一題(JPA503)-矩陣之和[使用 %02d、陣列指定初始值+函數運用]:

A.length 和 A[i].length 的差別

int [][]A=new int [2][3]; //矩陣: int [][]A={{1,2,3},{4,5,6}}; //1 2 3 {} // 00 01 02 10 11 12 //4 5 6 {} A.length=2; //看大{}內的小{}有多少個,代表兩列 A[i].length //第i列的有多少元素 A[0]=3; //{1,2,3},共3個 A[1]=3; //{4,5,6},共3個

%02d是什麼?

[個位數字補0]
至少2位十進制整數,如果數字小於或等於9
則第一個為零,不夠就補0

System.out.printf("%02d ",i); 輸出結果: 010203...09 //簡單來說就是 [個位數字補0] 1011...


解答:

public class JPA051 
{					//宣告兩個整數變數[全域型變數=>在主程式、函數也可以使用]
//	final static int ROW = 2;	//宣告二維陣列的[列數] final常數
//	final static int COL = 3;	//宣告二維陣列的[行數] final常數

	public static void main(String args[]) 
	{
        	int A[][] = {{1,2,3}, {4,5,6}};		//兩列三行
        	int B[][] = {{7,8,9}, {10,11,12}};
        	int C[][] = new int[2][3];
       
        	System.out.printf("陣列A的內容為(3x3):\n");   
        	show(A);
       
        	System.out.printf("\n陣列B的內容為(3x3):\n");   
        	show(B);
       
        	add(A, B, C);
       
        	System.out.printf("\n陣列A+B=C,陣列C的內容為(3x3):\n");   
        	show(C);
    	}
    
    	public static void add(int[][] A,int[][] B,int[][] C) 
	{
        	for(int i=0;i<2;i++)	//A.length(列數)
		{
			for(int j=0;j<3;j++)	//A[i].length(行數)第i列有多少元素
			{				//{{},{}}每一個{}內部有幾個元素
				C[i][j]=A[i][j]+B[i][j];
			}
		}
    	}
    
    	public static void show(int [][]N) 	//列印陣列(A、B、C陣列都會進來)
	{
        	for(int i=0;i<2;i++)
		{
			for(int j=0;j<3;j++)
			{
				System.out.printf("%02d ",N[i][j]);  //%02d代表2bits輸出
			}						//自動補0
			System.out.printf("\n");
		}
    	}
}

第二題(JPA504)-費氏數列F[使用陣列+迴圈]:

費氏數列

程式語言中常見的遞迴

他的每一項分別是:
A0=0
A1=1
AN=A(N-1)+A(N-2)
也就是A2以後每一項的值就是前兩項的值相加
使用遞迴的方法可以把費式數列的值做出來

解答:

public class JPA051 
{   
	public static void main(String[] args)
	{        	
		int[] F=new int[10]; //F[0]~F[9],共10個
		F[0]=0;
		F[1]=1;
		        //注意迴圈 初始i是2
		for(int i=2;i<F.length;i++)	//計算
		{
			F[i]=F[i-1]+F[i-2];   //F[2]=F[1]+F[0]
		}
		
		for(int i=0;i<F.length;i++)	//輸出
		{
			System.out.printf("%d\n",F[i]);
		}
	}						  
}					

加上例外處理的解答:

public class JPA051 
{   
	public static void main(String[] args) throws ArrayIndexOutOfBoundsException
	{
		try
		{        	
			int[] F=new int[10];
			F[0]=0;
			F[1]=1;
		
			for(int i=2;i<F.length;i++)	//計算
			{
				F[i]=F[i-1]+F[i-2];
			}
		
			for(int i=0;i<=F.length;i++)	//輸出
			{
				System.out.printf("%d\n",F[i]);	    //OutOfBoundsException
			}					   //迴圈範圍錯誤
		}						  //代表陣列存取超出範圍
		catch(ArrayIndexOutOfBoundsException ie)         //改成i <= F.length會產生OutofBound例外訊息
		{
			System.out.println("陣列存取超出範圍,迴圈範圍錯誤"+ie);
		}
	}	
}

第三題(JPA505)-反轉陣列[使用陣列交換]:

反轉:

public static void reverse(String[]N) { String temp; for(int i=0;i<N.length/2;i++) //做5次交換(看上圖的線,代表5次交換) { temp=N[i]; //temp=A //原先N[0]的值會被蓋掉 N[i]=N[(N.length-1)-i]; //N[0]=J //所以用Temp先接住 N[(N.length-1)-i]=temp; //N[9]=A //達到A、J交換 } }


解答:

public class JPA051 
{
	public static void main(String[] argv) 
	{
        	String[] data = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}; //宣告一維字元陣列data,共10個元素
        	
		System.out.print("反轉陣列資料之前: ");
		for(int i=0;i<data.length;i++)
		{
			System.out.printf("%s ",data[i]);
		}
        	System.out.printf("\n");

        	reverse(data);
        
        	System.out.print("反轉陣列資料之後: ");
 		for(int i=0;i<data.length;i++)
		{
			System.out.printf("%s ",data[i]);
		}
        	System.out.printf("\n");
    	}
    
    	public static void reverse(String[]N) 
	{
		String temp;
        	for(int i=0;i<N.length/2;i++)	//做5次交換
		{
			temp=N[i];			 //temp=A
			N[i]=N[(N.length-1)-i];	 //N[0]=J
			N[(N.length-1)-i]=temp;	 //N[9]=A
		}
    	}
}

額外延伸

泡沫排序法:

將數字 由小排到大由大排到小

[泡沫排序法1]
[泡沫排序法2]

最後編輯時間:2021/5/23 9:48pm.

tags: JAVA課堂學習 複習用 高科大