17.函數(方法):方法是一段能完成獨立功能的代碼塊,咱們只須要修一次方法,就能夠屢次被利用,提升代碼的複用性java
<public> <static> 返回值類型[void] 方法名([數據類型 變量名,數據類型1 變量名1,...]){
//方法體;
[return 結果值];
}數組
若是一個方法的返回值是void,那麼咱們不須要返回值,因此不須要寫return 變量值;能夠有retur;表明程序終止函數
有返回值的調用寫好的方法須要使用返回值來接收方法返回的結果,沒有返回值的調用不須要只用返回值接收排序
方法的參數列表無關緊要,可多個,先指定類型在指定變量名,多個參數用逗號分隔索引
return:在方法有返回值的狀況下返回具體的數據接口
程序方法的調用須要知足:1.方法的名字y一致;2.調用的端必須符合參數定義(參數的類型和數量),要區分變量的做用域問題內存
運行程序時在內存區產生一個Jvm,Jvm分紅三大塊,堆、棧、數據共享區,理解java直傳遞的概念作用域
class Demo1{
public static void main(String[] args){
int a=19;
int b=20;
//有返回值的,調用寫好的方法,使用返回值來接收方法返回的結果
int result=compareNum(a,b);
System.out.println(result);
}
/*
<public> <static> 返回值類型[void] 方法名([數據類型 變量名,數據類型1 變量名1,...]){
//方法體;
[return 結果值];
}
*/
//方法書寫爲駝峯式,見文知義原則,此處的a、b是形式參數,方法參數的做用域是在這個方法體內的
public static int compareNum(int a,int b){
int c=0;
if(a>=b){
c=a;
}
if(a<b){
c=b;
}
//返回結果值,且當有返回值的時候就不能有return;
return c;
}
}io
class Demo2{
public static void main(String[] args){
int a=-7;
int b=20;
//調用寫好的方法,沒有返回值,不須要使用返回值來接收返回的結果
compareNum(a,b);
}
//若是一個方法返回值類型是void,那麼就不須要返回值,return;表明程序終止,因此不須要再寫return 變量名
public static void compareNum(int a,int b){
if(a<0||b<0){
System.out.println("程序被終止");
// return;表明程序終止
return;
}
if(a>=b){
System.out.println(a);
}else{
System.out.println(b);
}
}
}
18.方法的重載:在同一個類中方法名字同樣,參數列表不同(數量、類型)的兩個方法是重載關係,跟返回值一點關係沒有;目的:爲了節約方法的功能命名提升代碼的可讀性for循環
只有方法名和參數列表能夠區分重載
class Demo3{
public static void main(String[] args){
int a=-7;
int b=20;
int c=12;
//調用寫好的方法,沒有返回值,不須要使用返回值來接收返回的結果
add(a,b);//13
add(a,b,c);//25
//實際參數的位置和類型與形式參數要一致,只有方法名和參數列表能夠區分重載
add(a,12.5);//5.5
}
//輸出調用兩個參數求和的方法
public static void add(int a,int b){
System.out.println(a+b);
}
//輸出調用三個參數求和的方法
public static void add(int a,int b,int c){
System.out.println(a+b+c);
}
//輸出調用兩個參數求和的方法,第二個參數類型是double
public static void add(int a,double b){
System.out.println(a+b);
}
}
19.數組的定義
數據類型分爲基本數據類型(數值型、字符型、布爾類型)和引用數據類型,引用數據類型:類(class)、接口(interface)、數組([])
基本數據類型的變量都是存儲在棧中,棧的特色是存儲空間小可是存取速度快,先進後出;
引用數據類型所佔空間比較大,存儲在堆中,堆得特色是空間大存取速度比較慢
整數類型、小數類型默認值都是0,布爾類型默認值是false;字符類默認值是空格''
數組的的三種定義方式:
第一種定義方式,定義一個數組,數據類型[] 數組名=new 數據類型[整數(表示數組長度)],比較經常使用定義一個空數組後賦值
第二種定義方式,定義一個數組arr1,數據類型[] 數組名={值1,值2,......},適合定義一個易於初始化的數組
第三種定義方式,定義一個數組arr2,數據類型[] 數組名=new 數據類型[]{值1,值2,......},適合傳遞匿名常量數組
int[] arr=new int[8]
arr是數組類型的變量(若是引用數據類型習慣上叫作引用),new int[8]真正的數據存儲在堆中,新建立的數據每個位置上的值都是其所屬數據類型的默認值,數組的索引是0開始;
得到數組的長度使用數組的屬性length,經過數組的變量名(數組的整地址),經過數組的變量名加上數組的下標或者索引能夠對數組的每個值進行操做,數組的下標不要越界使用,不然會報錯lang.ArrayIndexOutBoundsException
class Demo5{
public static void main(String[] args){
//第一種定義方式,定義一個數組,數據類型[] 數組名=new 數據類型[整數(表示數組長度)],比較經常使用定義一個空數組後賦值
int[] arr=new int[8];
//給數組裏面的數據來設置值
arr[0]=5;
arr[1]=2;
arr[2]=1;
arr[3]=1;
arr[4]=3;
arr[5]=1;
arr[6]=4;
arr[7]=0;
/*
//訪問數組中的每個數
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println(arr[5]);
System.out.println(arr[6]);
System.out.println(arr[7]);
//得到數組的長度使用數組的屬性
int len=arr.length;
System.out.println(len);
*/
printlnArr(arr);
//第二種定義方式,定義一個數組arr1,數據類型[] 數組名={值1,值2,......},適合定義一個易於初始化的數組
int[] arr1={1111,2222,3333};
//第三種定義方式,定義一個數組arr2,數據類型[] 數組名=new 數據類型[]{值1,值2,......},適合傳遞匿名常量數組
char[] arr2=new char[]{'a','b','c'};
//得到數組的長度使用數組的屬性
int len=arr.length;
System.out.println(len);
printlnArr(arr1);
printlnArr(arr2);
}
/*
<public> <static> 返回值類型[void] 方法名([數據類型[] 數組名,數據類型1[] 數組名1,...]){
//方法體;
[return 結果值];
}*/
//方法書寫爲駝峯式,見文知義原則,此處的a、b是形式參數,方法參數的做用域是在這個方法體內的
public static void printlnArr(int[] arr){
//使用for循環打印數組,注意數組的下標不要越界使用,不然會報錯lang.ArrayIndexOutBoundsException
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
public static void printlnArr(char[] arr){
//使用for循環打印數組,注意數組的下標不要越界使用,不然會報錯lang.ArrayIndexOutBoundsException
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
20.求極值
數組是引用數據類型,引用數據類型可能發生空指向的問題,引用數據類型定義爲null就是空指向沒有任何具體的指向目標,基本數據類型是不存在這種狀況的
注意爲了程序的嚴謹性,必定要判斷null和0長度的問題,並且順序不能顛倒!!
class Demo6{
public static void main(String[] args){
int[] arr=new int[]{45,72,9,63,84};
//有返回值的,調用寫好的方法,使用返回值來接收方法返回的結果
int result=max(arr);
System.out.println(result);
}
/*
<public> <static> 返回值類型[void] 方法名([數據類型 變量名,數據類型1 變量名1,...]){
//方法體;
[return 結果值];
}
*/
public static int max(int[] arr){
//定義一個最大值的結果
int maxvalue=1;
//爲了程序的嚴謹性,必定要判斷null和0長度的問題,並且判斷順序不能顛倒!!!
if(arr!=null&&arr.length!=0){
for(int i=0;i<arr.length;i++){
//若是遍歷的數組中的值比最大值變量大的話須要更換賦值
if(arr[i]>=maxvalue){
maxvalue=arr[i];
}
}
}
return maxvalue;
}
}
21.冒泡排序:相鄰兩個數作比較,若是後一個數比前一個數大,那麼就要交換位置,最終每一輪比較產生一個最小值
比較的輪數小於長度減一;比較的次數小於長度減輪數減一
class Demo7{
public static void main(String[] args){
int[] arr=new int[]{45,72,9,63,84};
//調用方法進行冒泡排序
sortPop(arr);
//打印排序以後的數組中的值
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
/*
<public> <static> 返回值類型[void] 方法名([數據類型 變量名,數據類型1 變量名1,...]){
//方法體;
[return 結果值];
}
*/
public static void sortPop(int[] arr){
//爲了程序的嚴謹性,必定要判斷null和0長度的問題,並且判斷順序不能顛倒!!!
if(arr!=null&&arr.length!=0){
//外層爲比較的輪數小於長度減一
for(int i=0;i<arr.length-1;i++){
//內層是比較的次數小於長度減輪數減一
for(int j=0;j<arr.length-i-1;j++){
if(arr[j+1]>arr[j]){
//定義一個臨時值
int temp=arr[j];
//交換較大值與較小值的位置
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}
}
22.數組的倒置
找到中間索引爲length/2
得到第i位對應的對稱的索引length-i-1
class Demo8{ public static void main(String[] args){ int[] arr=new int[]{45,72,9,63,84,51,99,106}; //調用方法進行倒序排序 reserveArr(arr); //打印排序以後的數組中的值 for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+"\t"); } } /* <public> <static> 返回值類型[void] 方法名([數據類型 變量名,數據類型1 變量名1,...]){ //方法體; [return 結果值]; } */ public static void reserveArr(int[] arr){ //爲了程序的嚴謹性,必定要判斷null和0長度的問題,並且判斷順序不能顛倒!!! if(arr!=null&&arr.length!=0){ //找到中間索引length/2 for(int i=0;i<arr.length/2;i++){ // int backNum=arr[arr.length-i-1]; int temp=arr[i]; arr[i]=backNum; arr[arr.length-i-1]=temp; } } } }