_Java基礎_Java語言基礎組成(下)

Java語言基礎(下)

五、程序流程控制結構

    就像日常生活中寫文章時,可以採用順敘、插敘、倒敘的方式描述一件事;在java語言中,程序代碼的執行順序也可以採用不同的“描述”方式,這種“描述”方式就是程序流程控制結構。

    程序流程控制結構可以細分爲以下三種方式:

    (1)、判斷結構:if語句

    if語句有三種格式:

        1)、if(條件表達式){執行語句;}

        2)、if(條件表達式){執行語句;} else{執行語句;}

        3)、if(條件表達式){執行語句;}else if(條件表達式){執行語句;}else{執行語句;}

    注意:if語句可以進行多層的嵌套使用,並且條件表達式必須是Boolean類型的,要麼是true,要麼是false。

    (2)、選擇結構:switch語句

       switch(表達式)

                  {  

                         case取值1:

                                執行語句;

                                  break;

                          case取值2:

                               執行語句;

                              break;

                          …...

                          default:

                                   執行語句;

                                   break;

                  }

    注意:在switch語句中的選擇的類型只能是這四種類型:byte、short、char、int。

    (3)、循環結構:while語句,do while 語句,for語句

            while語句格式:while(條件表達式){執行語句;}

            do while語句格式:do{執行語句;}while(條件表達式);

            for語句格式:for(初始化表達式;循環條件表達式;循環後的操作表達式)

                          {

                            執行語句;

                            }

練習:打印一個九九乘法表:

package itheima.day03;
/*打印一個九九乘法表*/
public class Multiplication {
	public static void main(String[] args) {
		//運用大圈套小圈的原理
		for(int row = 1;row <=9;row++){// 大圈控制行
			for(int col = 1;col<=row;col++){//小圈控制列
				System.out.print(col+"*"+row+"="+row*col+'\t');
			}
			System.out.println();
		}
	}
}

    注意:do while特點是條件無論是否滿足,循環體至少被執行一次。,while與for可以互換,區別在於for爲了循環而定義的變量在for循環結束就是在內存中釋放。而while循環使用的變量在循環結束後還可以繼續使用。

    (4)、其他流程控制語句:break語句,continue語句

        break語句:跳出本層結構,用於選擇結構和循環結構中。

        continue語句:結束本次循環繼續下次循環,用於循環結構中。

六、函數

    函數的定義:函數就是封裝了特定功能的一段獨立的小程序,在java中,函數也稱爲方法。

    函數的格式:

        修飾符 返回值類型 函數名(參數類型 形式參數1,參數類型 形式參數2,)

                        {

                            執行語句;

                            return 返回值;

                        }

    定義函數就是爲了將特定的功能進行封裝,降低代碼的耦合性,提高代碼的重用性。函數只有被調用的時候纔會被執行,並把執行後的返回值返回給調用者。當沒有返回值時,返回類型使用關鍵字void表示,return語句可以省略不寫。函數是支持調用其他函數的,但是不支持函數的嵌套定義,也就是函數中定義函數。

    注意:一般定義函數時,要明確函數最後的返回結果,也就是要返回的數據;還要明確參與函數運算的數據,也就是形式參數的列表要明確;函數名應該儘量寫成與該函數功能相同,提高閱讀性。

    函數的重載(overload):在一個類中,當兩個或者兩個以上的函數名稱相同,並且形式參數的列表不相同時,就稱這些函數重載,重載與返回值類型無關。

    例如:  int add(int x,int y){returnx+y;}

            intadd(int x,int y,int z){return x+y+z;}

            doubleadd(double x,double y){return x+y;}

七、數組

    數組:數組是一種容器,但數組這種容器中只能存儲相同的數據類型元素。

    格式:1、元素類型[] 數組名 = new 元素類型[元素個數或數組長度];

             例如:int[] arr = new int[10];

          2、元素類型[] 數組名 = new 元素類型[]{元素,元素,……};

             例如:int[] arr = new int[]{1,5,8,7};

                  int[] arr = {1,5,8,7};

    內存結構:每一個程序的運行都需要分配內存。在java中,爲了提高運算的效率,因此對內存進行了劃分。可以分爲:棧內存、堆內存、方法區、本地方法區、寄存器。下面只介紹棧區和堆區,其他的內存結構會在以後的使用中再介紹。

    棧內存:用於存儲局部變量,當數據使用完,所佔空間會自動釋放,相對來說較小。

    堆內存:用於存儲數組和對象,一般用new關鍵字建立的實體都存儲在堆內存中;每一個實體都有內存地址值;每一個實體的變量都有默認初始化值;當實體不再被引用指向時,由垃圾回收器回收。如圖3.1所示:

圖3.1

下面就寫幾個練習熟悉一下函數和數組的操作:

獲取最值:

package itheima.day04;
	/*獲取一個數組中的最大值*/
public class ArrayDemo1 {
	public static void main(String[] args) {
		int[] arr = {5,9,6,3,1,4,2,10};//1:定義一個數組
		int max = getMax(arr);//2:調用函數,獲取最大值
		System.out.println("數組中最大值是:"+max);//3:打印最大值,10
	}
	public static int getMax(int[] arr){//把一個獨立的功能封裝成爲一個函數,使代碼結構更加清晰
		int max = arr[0];
		for(int i=0;i<arr.length;i++){
			if(max<arr[i]){
				max = arr[i];
			}
		}
		return max;
	}
}

排序:

package itheima.day04;
/*給一個數組進行排序*/
public class ArrayDemo2 {

	public static void main(String[] args) {
		int[] arr ={100,25,63,59,54,61,76};
		printArray(arr);//打印數組
		//selectSort(arr);//給數組進行選擇排序
		bubbleSort(arr);//給數組進行冒泡排序
		printArray(arr);//再打印數組
	}
	
	public static void selectSort(int[] arr){//把選擇排序的功能封裝成爲一個函數,提高代碼複用性
		for(int x = 0;x<arr.length-1;x++){//控制比較次數
			for(int y = x+1;y<arr.length;y++){//控制每一次都多少個數進行比較
				if(arr[x]>arr[y]){
					swap(arr,x,y);//調用函數,交換兩個值
				}
			}
		}
	}
	
	public static void bubbleSort(int[] arr){//冒泡排序的函數
		for(int x=0;x<arr.length-1;x++){//控制比較的次數
			for(int y=0;y<arr.length-x-1;y++){//每一次要比較數的多少
				if(arr[y]>arr[y+1]){
					swap(arr,y,y+1);//交換兩個數
				}
			}
		}
	}
	
	private static void swap(int[] arr,int x,int y){//將重複調用的代碼獨立封裝成爲函數,使代碼更加緊湊
		int temp =arr[x];
			arr[x] =arr[y];
			arr[y] =temp;
	}
	
	public  static void printArray(int[] arr){//打印函數
		System.out.print("[");
		for(int x =0;x<arr.length;x++){
			if(x!=arr.length-1)
				System.out.print(arr[x]+", ");
			else
				System.out.println(arr[x]+"]");
		}
	}
}

折半查找(二分查找):

package itheima.day04;
/*演示二分查找*/
public class BinarySearch {
 
	public static void main(String[] args) {
		/*二分查找的前提:要查找的數組必須是有序的,否則無法進行*/
		int[] arr = {1,3,5,6,8,9,11};
		int index = halfSearch(arr,1);//調用函數
		System.out.println("index = "+index);
	}
	public static  int halfSearch(int[] arr,int key){//二分查找的函數
		int min = 0,max = arr.length-1,mid;
		while(min<=max){
			mid = (max+min)>>1;
			if(key>arr[mid])
				min = mid+1;//當要查找的數大於中間數時,在數組右邊查找
			else if(key<arr[mid])
				max = mid-1;//當要查找的數小於中間數時,在數組左邊查找
			else
				return mid;//找到直接返回角標
		}
		
		return -1;//沒找到時返回-1
	}
}

十進制轉換成其他進制:

package itheima.day04;
/*實現進制之間的轉換*/
public class JinZhiConvertion {

	public static void main(String[] args) {
		int number = 60;
		toBinary(number);//轉換成二進制
		toOctal(number);//轉換成八進制
		toHex(number);//轉換成十六進制
	}
	public static void translation(int num,int base,int offset){
		char[] chs ={'0','1','2','3',
					  '4','5','6','7',
					  '8','9','A','B',
					  'C','D','E','F'};//數組查表法
		char[] arr = new char[32];
		int pos = arr.length;
		if(num ==0){//檢查數組是否爲零
			System.out.println(0);
			return ;
		}
		
		while(num!=0){//轉換
			int temp = num&base;
			arr[--pos] = chs[temp];
			num = num>>>offset;
		}
		for(int x=pos;x<arr.length;x++){
			System.out.print(arr[x]);
		}
		System.out.println();
	}
	public static void toBinary(int num){//轉成二進制
		translation(num,1,1);
	}
	public static void toHex(int num){//轉成十六進制
		translation(num,15,4);
	}
	public static void toOctal(int num){//轉成八進制
		translation(num,7,3);
	}
}

    二維數組:數組中存儲的元素還是一個數組,數組中的數組,就稱爲二維數組

    格式1:int[][] arr = new int[3][2];二維數組arr中有3個一維數組,每個一維數組有兩個int類型的元素。

    格式2:int[][] arr = new int[3][];二維數組arr中有3個一維數組,這3個一維數組都沒有進行初始化。

    格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};二維數組arr中有3個一維數組,這3個一維數組都已經初始化,並且已經固定。

    注意:二維數組中存儲的是每一個一維數組的地址值,並非具體的數組數值!

package itheima.day04;
public class ArrayInArray {
	/*演示二維數組中的注意問題*/
	public static void main(String[] args) {
	int[][] arr = new int[3][];
	System.out.println(arr.length);//3,打印二維數組的長度
	System.out.println(arr[1]);//null,因爲arr[1]還是一個一維數組,還沒有初始化,所以爲null
	
	arr[0] = new int[]{2,3,6};//給二維數組中的一維數組初始化,就像初始化普通的一維數組一樣
	arr[1] = new int[]{5,9,6};
	arr[2] = new int[]{7,8,4};
	
	for(int x =0;x<arr.length;x++){//打印二維數組
		for(int y=0;y<arr[x].length;y++){
			System.out.print(arr[x][y]+" ");
			}
		System.out.println();
		}
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章