黑馬程序員-java基礎第3、4天-函數和數組


-------------------------ASP.Net+Unity開發、.Net培訓、期待與您交流!--------------------------

函數
函數的定義

函數就是定義在類中的,具有特定功能的一段獨立的小程序,函數又稱爲方法。
-------------------------------------------------------------------------------------------------
函數定義的格式

修飾符 返回值類型 函數名(參數類型 形式參數1,參數類型 形式參數2,、、、)
{
執行語句;
return 返回值;

}

1、修飾符:包括 private、public、static、final
當函數被private修飾時,表示此函數是私有的即只在被類中被調用,外部類不能調用。
當函數被public修飾時,表示此函數是公有的即除了可以在本類中被調用,外部類也可以直接調用此函數。
當函數被static修飾時,表示此函數爲靜態函數,則此函數中只能直接調用靜態成員。並且靜態函數隨着
類的加載而加載,隨着類的消失而消失。

2、返回值類型:函數運行結束之後,結果的數據類型。
3、參數類型:是形式參數的數據類型。
4、形式參數:是一個變量,用於存儲調用函數時傳遞給函數的實際參數。
5、實際參數:傳遞給形式參數的具體數值。
6、return :用於結束函數。當函數無返回值時,此時返回值類型用void關鍵字表示,並且return可以寫可以
不寫,不寫的話系統會自動給加上。return的作用即結束函數、結束功能。
7、返回值:該值會返回給調用者。

例子:
public static int getMax(int x,int y)
{
return (x>y)?x:y;
}
-------------------------------------------------------------------------------------------------------
函數的分類
1、主函數:保證一個類能夠獨立運行,是一個程序運行的入口,被jvm調用,主要用來調用函數。
2、構造函數:給類的對象進行初始化。此函數名和類名一樣。
3、函數(方法):定義在類中,並且當被別的函數調用時才能執行。注意,函數中不能再定義函數,只能是函
數調用函數。
--------------------------------------------------------------------------------------------------------
函數的作用
 
 1、用於定義一個功能。
 2、將代碼進行封裝,提高代碼的複用性。
---------------------------------------------------------------------------------------------------------
函數的重載和複寫
1、函數的重載:在一個類中,如果出現了一個或多個同名函數時,只要他們的參數列表(參數個數或者參數類型)不
同即爲該函數的重載。
2、什麼時候使用重載呢?
當函數的功能相同,但是參數運算的未知內容不同,那麼,這時就定義一個函數名稱以表示其功能,方便閱讀,
而通過參數列表(參數個數或者參數類型)的不同,來區分多個同名函數。
3、區分函數的重載:當同名函數時,只看函數的參數列表而不看函數的返回值類型。
4、函數的複寫:函數的複寫出現在繼承中,即子類和父類有相同的函數(即函數名、參數列表以及返回值都相同),
那麼就叫做子類中的函數複寫了父類中的函數。
5、複寫的注意事項:
靜態函數只能覆蓋靜態函數;
複寫時子類的函數權限要等於或者大於父類中函數的權限。

例子

class OverLoadDemo 
{
	public static void main(String[] args) 
	{
		//print99(6);
		print99();
	}
	//打印所指定的num階乘法表,具有擴展性。
	public static void print99(int num)
	{
		for (int x=1;x<=num ;x++ )
		{
			for (int y=1;y<=x ;y++ )
			{
				System.out.print(y+"*"+x+"="+y*x+"\t");
			}
			System.out.println();//換行
		}
	}
	//只能打印9階乘法表。
	public static void print99()
	{
		for (int x=1;x<=9 ;x++ )
		{
			for (int y=1;y<=x ;y++ )
			{
				System.out.print(y+"*"+x+"="+y*x+"\t");
			}
			System.out.println();
		}
	}
} 
---------------------------------------------------------------------------------------------------------
數組
1、定義:同一種類型數據的集合,其實數組就是一個容器。一次裝起來的數據的類型必須一樣。
2、特點:自動給元素進行編號,且從0開始編號。
數組一旦被定義,其數組的長度固定,不可變,所以給數組增加元素的動作要小心。
數組中元素的類型一樣。
3、數組的分類:一維數組、二維數組。
----------------------------------------------------------------------------------------------------------
數組定義格式
1、一維數組
元素類型[] 數組名=new 元素類型[元素個數或數組長度];
int[] arr=new int[3];

元素類型[] 數組名=new 元素類型[]{元素1,元素2,、、、};
int arr=new int[]{1,3,5};

元素類型[] 數組名={元素1,元素2,、、、};
int[] arr={1,3,5,7};

2、二維數組
元素類型[][] 數組名=new 元素類型[二維數組長度][二維數組中每一個一維數組的長度];
int[][] arr=new int[3][4];

元素類型[][] 數組名={{1,3,5,2},{4,3,1},{5,9,8,0}};
------------------------------------------------------------------------------------------------------
內存情況
arr 是變量,所以是存放在棧內存中的。當變量在範圍內使用完了之後,自動釋放內存,
new 即創建對象,是存放在堆內存中的。當對象使用完了之後,變成垃圾,並通過垃圾回收機制來釋放內存空間。
-------------------------------------------------------------------------------------------------------
遍歷數組
1、遍歷一維數組
第一種遍歷方式:利用普通for循環
 for (int x=0;x<arr.length ;x++ )
 {
System.out.println(arr[x]);
 }

 第二種遍歷方式:利用高級for循環
  for (int arrs:arr )
  {
 System.out.println(arrs);
 
  }

2、遍歷二維數組
for (int x=0;x<arr.length ;x++ )
{
for (int y=0;y<arr[x].length ;y++ )
{
System.out.println(arr[x][y]);
}
}
---------------------------------------------------------------------------------------------------------
數組的應用

包括:求最大值,最小值,冒泡排序,選擇排序,折半查找,進制轉換

/**
對數組的各種操作封裝成類,以方便以後方便對數組的操作。
@author 賀利英
@version V1.1

*/

class ArrayTool 
{
	/**
	獲取整型數組中元素的最大值,獲取最大值是通過遍歷數組比較得到的,
	所以每次比較之後最大值存起來,所以每次的最大值並不確定,所以
	最大值用一個變量來存儲,將每次比較得到的最大值存放在此變量中。
	@param arr 接收一個int類型的數組。
	@return 會返回該數組中的最大值。
	
	*/
	public static int getMax(int[] arr)
	{
		int max=0;
		for (int x=1;x<arr.length ;x++)
		{
			if (arr[x]>arr[max])
			{
				swap(arr,x,max);
			}
		}
		return arr[max];
	}
	/**
	獲取整型數組中元素的最大值。
	@param arr 接收一個int類型的數組。
	@return 返回此數組中元素的最小值。
	*/
	public static int getMin(int[] arr)
	{
		//定義一個變量,將每次比較的最小值得角標付給min來保存。
		int min=0;
		for (int x=1;x<arr.length;x++ )
		{
			if (arr[x]<arr[min])
			{
				swap(arr,x,min);
			}
		}
		return arr[min];
	}
	/**
	對int類型的數組進行選擇排序。每次用數組中的元素以此與此元素
	後面的元素進行比較,將最值放在此元素處。
	@param arr 接收一個int類型的數組。
	*/
	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);
				}
			}
		}
	}
	/**
	對數組進行冒泡排序。此排序原理,將數組中相鄰的兩個元素進行比較,
	每比較一圈之後,其最值都會出現在數組的最後的位置。
	@param arr 接收一個int類型的數組。
	*/
	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);
				}
			}
		}
	}
	/**
	對數組中的元素進行位置置換。
	@param arr 接收一個int類型的數組。
	@param x 要置換的位置。
	@param y 要置換的位置。
	*/
	private static void swap(int[] arr,int x,int y)
	{
	
		int temp=arr[x];
		arr[x]=arr[y];
		arr[y]=temp;
	}
	/**
	給定一個元素,查找此數組中是否有此元素,若有的話
	則給出此元素在數組中的角標,否則的話,返回-1。
	利用折半查找法進行查找,前提:此數組是有序的。
	@param arr 接收一個int類型的數組。
	@param key 要進行查找的元素。
	*/
	public static int halfSearch(int[] arr,int key)
	{
		int min=0,max=arr.length-1,mid;
		//前提是min角標不能大於max角標
		while (min<=max)
		{
			//每次比較的時候找到中間位置
			mid=(min+max)/2;
			//讓key和中間位置的元素進行比較
			if (key>arr[mid])
			{
				min=mid+1;
			}
			else if (key<arr[mid])
			{
				max=mid-1;
			}
			else
				return mid;
		}
		return -1;//若此處寫成return min;則代表此函數的功能是在數組中插入一個給定的元素,
		          //插入之後,依然保持此數組是有序的,所以利用折半查找的方法,找出要插入此
				  //元素的位置。
	}
	/**
	利用查表法對數進行進制轉換。
	@param num 要進行進制轉換的數。
	@param base 在進制轉換中要進行&的數
	@param offset 對num進行無條件右移的位數。
	*/
	public static void trans(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;
		while (num!=0)
		{
			//每次都將右移offset之後的數和base進行與運算,來得到相應的進制值
			int temp=num&base;
			arr[--pos]=chs[temp];
			//將num右移offset位
			num=num>>>offset;
		}
		//打印得到的進制值
		for (int x=pos;x<arr.length ;x++ )
		{
			System.out.println(arr[x]);
		}
	}
	/*
	進行優化之後的代碼,即利用字符串緩存來進行存儲每次得到的數。
	public static void trans(int num,int base,int offset)
	{
		char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		
		StringBuffer sb=new StringBuffer();
		while (num!=0)
		{
			int temp=num&base;
			sb.append(chs[temp]);

			num>>>offset;
		}
		
			System.out.println(sb.reverse());
		
	}
	
	
	*/
}


-------------------------ASP.Net+Unity開發、.Net培訓、期待與您交流!--------------------------


詳情請查看:http://edu.csdn.net


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