-------------------------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培訓、期待與您交流!--------------------------