JavaSE篇-Day(5)學習筆記

方法概述和格式說明

方法:完成特定功能的代碼塊。

注意:在很多語言裏面有函數的定義,而在Java中函數被稱爲方法。

方法格式:

  修飾符 返回值類型 方法名(參數類型 參數名1,參數類型 參數名2...) {
		方法體語句;
		return 返回值; 
	}

詳細解釋:

  • 修飾符:目前就用 public static。後面我們再詳細的講解其他的修飾符。

  • 返回值類型:就是功能結果的數據類型。

  • 方法名:符合命名規則即可。方便我們的調用。

  • 參數:

    • 實際參數:就是實際參與運算的。
    • 形式參數;就是方法定義上的,用於接收實際參數的。
  • 參數類型:就是參數的數據類型。

  • 參數名:就是變量名。

  • 方法體語句:就是完成功能的代碼。

  • return:結束方法的。

  • 返回值:就是功能的結果,由return帶給調用者。

要想寫好一個方法,就必須明確兩個東西:

  • A:返回值類型
    結果的數據類型

  • B:參數列表
    你要傳遞幾個參數,以及每個參數的數據類型

方法的定義求和案例

需求:求兩個數據之和的案例

  • 方法的執行特點:不調用,不執行。

  • 如何調用呢?(有明確返回值的調用)

    • A:單獨調用,一般來說沒有意義,所以不推薦。

    • B:輸出調用,但是不夠好。因爲我們可能需要針對結果進行進一步的操作。

    • C:賦值調用,推薦方案。

方法的調用有明確返回值的方法的調用

class FunctionDemo {
	public static void main(String[] args) {
		int x = 10;
		int y = 20;
		
		//方式1:單獨調用
		//sum(x,y);
	
		//方式2:輸出調用
		//System.out.println(sum(x,y));
		//System.out.println(30);
	
		//方式3:賦值調用
		int result = sum(x,y);
		//result在這裏可以進行操作
		System.out.println(result);
	}
	
	/*
		需求:求兩個數據之和的案例
		
		兩個明確:
			返回值類型:int
			參數列表:2個,都是int類型。
	*/
	public static int sum(int a,int b) {
			//如何實現呢?
			//int c = a + b;
			//return c;
			
			//c就是a+b,所以,我可以直接返回a+b
			return a + b;
	}
	
}

方法的調用圖解

tupian1

方法的練習1獲取兩個數中的最大值

/*
	鍵盤錄入兩個數據,返回兩個數中的較大值
*/
import java.util.Scanner;

class FunctionTest {
	public static void main(String[] args) {
		//創建鍵盤錄入對象
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入第一個數據:");
		int a = sc.nextInt();
		
		System.out.println("請輸入第二個數據:");
		int b = sc.nextInt();
		
		int result = getMax(a,b);
		System.out.println("較大值是:"+result);
	}
	
	/*
		需求:兩個數中的較大值
		兩個明確:
			返回值類型:int
			參數列表:int a,int b			
	*/
	public static int getMax(int a,int b) {
		//if語句
		/*
		if(a > b) {
			//System.out.println(a);
			return a;
		}else {
			//System.out.println(b);
			return b;
		}
		*/
		
		//用三元改進
		//int c = ((a > b)? a: b);
		//return c;
		
		//由於c就是後面的式子
		return ((a>b)? a : b);
	}
}

方法的練習2比較兩個數是否相等

/*
	鍵盤錄入兩個數據,比較兩個數是否相等
	
	分析:
		比較兩個數是否相等結果是一個boolean類型。
*/
import java.util.Scanner;

class FunctionTest2 {
	public static void main(String[] args) {
		//創建鍵盤錄入對象
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入第一個數據:");
		int a = sc.nextInt();
		
		System.out.println("請輸入第二個數據:");
		int b = sc.nextInt();
		
		boolean flag = compare(a,b);
		System.out.println(flag);
	}
	
	/*
		需求:比較兩個數是否相等
		兩個明確:
			返回值類型:boolean
			參數列表:int a,int b
	*/
	public static boolean compare(int a,int b) {
		//if語句的格式2實現
		/*
		if(a == b) {
			return true;
		}else {
			return false;
		}
		*/
		
		//三元改進
		//boolean flag = ((a==b)? true: false);
		//return flag;
		
		//繼續改進
		//return ((a==b)? true: false);
		
		//最終版
		return a == b;
	}
}

方法的練習3獲取三個數中的最大值

/*
	鍵盤錄入三個數據,返回三個數中的最大值
*/
import java.util.Scanner;

class FunctionTest3 {
	public static void main(String[] args) {
		//創建鍵盤錄入對象
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入第一個數據:");
		int a = sc.nextInt();
		
		System.out.println("請輸入第二個數據:");
		int b = sc.nextInt();
		
		System.out.println("請輸入第三個數據:");
		int c = sc.nextInt();
		
		int max = getMax(a,b,c);
		System.out.println("三個數據中的最大值是:"+max);
	}
	
	/*
		需求;返回三個數中的最大值
		
		兩個明確:
			返回值類型:int
			參數列表:int a,int b,int c
	*/
	public static int getMax(int a,int b,int c) {
		//if嵌套
		/*
		if(a > b) {
			if(a > c) {
				return a;
			}else {
				return c;
			}
		}else {
			if(b > c) {
				return b;
			}else {
				return c;
			}
		}
		*/
		
		//用三元改
		/*
		if(a > b) {
			return (a>c? a: c);
		}else {
			return (b>c? b: c);
		}
		*/
		
		//繼續改進
		//return (a>b)? (a>c? a: c): (b>c? b: c);
		//不建議,寫代碼一定要注意閱讀性強
		int temp = ((a>b)? a: b);
		int max = ((temp>c)? temp: c);
		return max;
	}
}

方法的注意事項

/*
	方法的注意事項:
		A:方法不調用不執行
		B:方法與方法是平級關係,不能嵌套定義
		C:方法定義的時候參數之間用逗號隔開
		D:方法調用的時候不用在傳遞數據類型
		E:如果方法有明確的返回值,一定要有return帶回一個值
*/
class FunctionDemo2 {
	public static void main(String[] args) {
		/*
		錯誤的
		public static int sum(int a,int b){
			return a + b;
		}
		*/
		
		//sum(10,20);
		
		//int x = 10;
		//int y = 20;
		//錯誤
		//sum(int x,int y);
	}
	
	public static int sum(int a,int b){
		return a + b;
	}
}

方法的調用void類型方法的定義和調用

/*
	需求:在控制檯輸出如下的形狀
		*****
		*****
		*****
		*****
		
	void類型返回值的方法調用:
		單獨調用
		輸出調用(錯誤)
		賦值調用(錯誤)
*/
class FunctionDemo3 {
	public static void main(String[] args) {
		//for循環嵌套輸出圖形
		for(int x=0; x<4; x++) {
			for(int y=0; y<5; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("--------------");
		
		//需求:我要在控制檯輸出一個6行7列的星形圖形
		for(int x=0; x<6; x++) {
			for(int y=0; y<7; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("--------------");
		
		//如果需要繼續改變,我們就應該考慮使用方法改進。
		//單獨調用
		pringXing(3,4);
		System.out.println("--------------");
		pringXing(6,7);
		System.out.println("--------------");
		pringXing(8,9);
		
		//輸出調用
		//此處不允許使用 '空' 類型
		//System.out.println(pringXing(3,4));
		
		//賦值調用
		//非法的表達式開始
		//void v = pringXing(3,4);
	}
	
	/*
		寫一個什麼樣子的方法呢?寫一個m行n列的代碼
		
		兩個明確:
			返回值類型:這個時候沒有明確的返回值,不寫東西還不行,所以,這裏記住是void
			參數列表:int m,int n
	*/
	public static void pringXing(int m,int n) {
		for(int x=0; x<m; x++) {
			for(int y=0; y<n; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

方法的練習4根據行數和列數輸出星形

/*
	鍵盤錄入行數和列數,輸出對應的星形
*/
import java.util.Scanner;

class FunctionTest4 {
	public static void main(String[] args) {
		//創建鍵盤錄入對象
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入行數:");
		int m = sc.nextInt();
		
		System.out.println("請輸入列數:");
		int n = sc.nextInt();
		
		//void類型的方法調用
		pringXing(m,n);
	}
	
	/*
		輸出星形
		
		兩個明確:
			返回值類型:void
			參數列表:int m,int n
	*/
	public static void pringXing(int m,int n) {
		for(int x=0; x<m; x++) {
			for(int y=0; y<n; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

方法的練習5根據鍵盤錄入輸入相對應的乘法表

/*
	鍵盤錄入一個數據n(1<=n<=9),輸出對應的nn乘法表
*/
import java.util.Scanner;

class FunctionTest5 {
	public static void main(String[] args) {
		//創建對象
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入n的值:(1~9)");
		int n = sc.nextInt();
		
		//調用
		printNN(n);
	}
	
	/*
		需求:輸出對應的nn乘法表
		兩個明確:
			返回值類型:void
			參數列表:int n
	*/
	public static void printNN(int n) {
		for(int x=1; x<=n; x++) {
			for(int y=1; y<=x; y++) {
				System.out.print(y+"*"+x+"="+y*x+"\t");
			}
			System.out.println();
		}
	}
}

方法重載概述和基本使用

/*
	需求:我要求數的和
	
	我們的需求不斷的發生改變,我們就對應的提供了多個求和的方法。
	但是呢,他們的名字是不一樣的。
	而我們又要求方法命名做到:見名知意。
	但是,很明顯,現在沒有做到。
	那麼,腫麼辦呢?
	針對這種情況:方法的功能相同,參數列表不同的情況,爲了見名知意,Java允許它們起一樣的名字。
	
	其實,這種情況有一個專業名詞:方法重載。
	
	方法重載:
		在同一個類中,方法名相同,參數列表不同。與返回值類型無關。
		
		參數列表不同:
			A:參數個數不同
			B:參數類型不同
*/
class FunctionDemo4 {
	public static void main(String[] args) {
		//jvm會根據不同的參數去調用不同的功能
		System.out.println(sum(10,20));
		System.out.println(sum(10,20,30));
		System.out.println(sum(10,20,30,40));
		
		System.out.println(sum(10.5f,20f));
	}
	
	//需求1:求兩個數的和
	public static int sum(int a,int b) {
		System.out.println("int");
		return a + b;
	}
	
	//需求2:求三數的和
	/*
	public static int sum1(int a,int b,int c) {
		return a + b + c;
	}
	*/
	
	public static int sum(int a,int b,int c) {
		return a + b + c;
	}
	
	//需求3:求四個數的和
	/*
	public static int sum2(int a,int b,int c,int d) {
		return a + b + c + d;
	}
	*/
	public static int sum(int a,int b,int c,int d) {
		return a + b + c + d;
	}
	
	public static float sum(float a,float b) {
		System.out.println("float");
		return a + b;
	}
}

方法重載練習比較數據是否相等

/*
	比較兩個數據是否相等。參數類型分別爲
		兩個byte類型,兩個short類型,兩個int類型,兩個long類型,
	並在main方法中進行測試
*/
class FunctionTest6 {
	public static void main(String[] args) {
		//測試
		byte b1 = 3;
		byte b2 = 4;
		System.out.println("byte:"+compare(b1,b2));
		
		//測試
		short s1 = 5;
		short s2 = 5;
		System.out.println("short:"+compare(s1,s2));
		
		//後面的兩個自己測試
	}
	
	//byte類型
	public static boolean compare(byte a,byte b) {
		System.out.println("byte");
		return a == b;
	}
	
	//short類型
	public static boolean compare(short a,short b) {
		System.out.println("short");
		return a == b;
	}
	
	//int類型
	public static boolean compare(int a,int b) {
		System.out.println("int");
		return a == b;
	}
	
	//long類型
	public static boolean compare(long a,long b) {
		System.out.println("long");
		return a == b;
	}
}

數組概述和定義格式說明

	數組:存儲同一種數據類型的多個元素的容器。
	
	定義格式:
		A:數據類型[] 數組名;
		B:數據類型 數組名[];
		
	舉例:
		A:int[] a; 定義一個int類型的數組a變量
		B:int a[]; 定義一個int類型的a數組變量
		
	注意:效果可以認爲是一樣的,都是定義一個int數組,但是念法上有些小區別。推薦使用第一種。

數組的初始化動態初始化

	如何對數組進行初始化呢?
		A:何謂初始化呢? 就是爲數組開闢內存空間,併爲每個數組元素賦予值
		B:有幾種方式呢?
			a:動態初始化 只指定長度,由系統給出初始化值
			b:靜態初始化 給出初始化值,由系統決定長度
			
	動態初始化的格式:
		數據類型[] 數組名 = new 數據類型[數組長度];
		
		舉例:
		int[] arr = new int[3];	
		
	如何獲取數組中的元素呢?
		通過:
			數組名[索引]
			索引其實就是每個元素的編號,從0開始,最大索引是數組的長度-1。
*/
class ArrayDemo {
	public static void main(String[] args) {
		//定義一個數組
		//int[] a;
		//可能尚未初始化變量a
		//System.out.println(a);
		
		int[] arr = new int[3];
		/*
			左邊:
				int:說明數組中的元素的數據類型是int類型
				[]:說明這是一個數組
				arr:是數組的名稱
				
			右邊:
				new:爲數組分配內存空間。
				int:說明數組中的元素的數據類型是int類型
				[]:說明這是一個數組
				3:數組長度,其實也就是數組中元素的個數
		*/
		
		System.out.println(arr); //[I@175078b 地址值。
		//我要地址值沒有意義啊,我就要數據值,怎麼辦呢?
		//不用擔心,java爲你考慮到了。
		//其實數組中的每個元素都是有編號的,並且是從0開始。最大編號是數組的長度-1。
		//用數組名和編號的配合就可以獲取數組中的指定編號的元素。這個編號的專業叫法:索引
		//通過數組名訪問數據的格式是:數組名[索引];
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
	}
}

Java中內存分配以及棧和堆的區別

tupian2

數組的內存圖解1一個數組

/*
	定義一個數組,輸出該數組的名稱和數組元素值。
	給數組元素賦值,再次輸出該數組的名稱和數組元素值。
*/
class ArrayDemo2 {
	public static void main(String[] args) {
		//定義一個數組
		int[] arr = new int[3];
		
		//輸出數組名稱
		System.out.println(arr);
		//輸出數組元素值
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println("----");
		
		//給數組元素賦值
		arr[0] = 100;
		arr[2] = 200;
		
		//輸出數組名稱
		System.out.println(arr);
		//輸出數組元素值
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
	}
}

tupian3

數組的內存圖解2二個數組

/*
	定義兩個數組,分別輸出兩個數組各自的數組名及元素值。
	然後給每個數組的元素重新賦值,再次分別輸出兩個數組各自的數組名及元素值。
*/
class ArrayDemo3 {
	public static void main(String[] args) {
		//定義第一個數組
		int[] arr = new int[2];
		//定義第二個數組
		int[] arr2 = new int[3];
		
		//輸出數組名和元素值
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println("----");
		
		System.out.println(arr2);
		System.out.println(arr2[0]);
		System.out.println(arr2[1]);
		System.out.println(arr2[2]);
		System.out.println("----");
		
		//給元素重新賦值
		arr[1] = 20;
		
		arr2[1] = 30;
		arr2[0] = 40;
		
		//輸出數組名和元素值
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println("----");
		
		System.out.println(arr2);
		System.out.println(arr2[0]);
		System.out.println(arr2[1]);
		System.out.println(arr2[2]);
	}
}

tupian4

數組的內存圖解3三個數組

/*
	定義第一個數組,定義完畢後,給數組元素賦值。賦值完畢後,在輸出數組名稱和元素。
	定義第二個數組,定義完畢後,給數組元素賦值。賦值完畢後,在輸出數組名稱和元素。
	定義第三個數組,把第一個數組的地址值賦值給它。(注意類型一致),通過第三個數組的名稱去把元素重複賦值。
	最後,再次輸出第一個數組數組名稱和元素。
*/
class ArrayDemo4 {
	public static void main(String[] args) {
		//定義第一個數組
		int[] arr = new int[3];
		arr[0] = 88;
		arr[1] = 33;
		arr[2] = 66;
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println("----");
		
		//定義第二個數組
		int[] arr2 = new int[3];
		arr2[0] = 22;
		arr2[1] = 44;
		arr2[2] = 55;
		System.out.println(arr2);
		System.out.println(arr2[0]);
		System.out.println(arr2[1]);
		System.out.println(arr2[2]);
		System.out.println("----");
		
		//定義第三個數組
		int[] arr3 =  arr;
		arr3[0] = 100;
		arr3[1] = 200;
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
	}
}

tupian5

數組的初始化靜態初始化記內存圖

/*
	數組的靜態初始化:
		格式:數據類型[] 數組名 = new 數據類型[]{元素1,元素2,…};
		簡化格式:
			數據類型[] 數組名 = {元素1,元素2,…};
		
		舉例:
			int[] arr = new int[]{1,2,3};
			
			簡化後:
			
			int[] arr = {1,2,3};
			
	注意事項:
		不要同時動態和靜態進行。
		如下格式:
			int[] arr = new int[3]{1,2,3}; //錯誤
*/
class ArrayDemo5 {
	public static void main(String[] args) {
		//定義數組
		int[] arr = {1,2,3};
		
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
	}
}

tupian6

數組操作的兩個常見小問題:越界和空指針

/*
	數組操作的兩個常見小問題:
		ArrayIndexOutOfBoundsException:數組索引越界異常
			原因:你訪問了不存在的索引。
		
		NullPointerException:空指針異常
			原因:數組已經不在指向堆內存了。而你還用數組名去訪問元素。
			
		作用:請自己把所有的場景Exception結尾的問題總結一下。以後遇到就記錄下來。
			  現象,原因,解決方案。
*/
class ArrayDemo6 {
	public static void main(String[] args) {
		//定義數組
		int[] arr = {1,2,3};
		
		//System.out.println(arr[3]);
	
		//引用類型的常量:空常量 null
		arr = null;
		System.out.println(arr[0]);
	}
}

數組的操作1遍歷

/*
	數組遍歷:就是依次輸出數組中的每一個元素。
	
	注意:數組提供了一個屬性length,用於獲取數組的長度。
		  格式:數組名.length
*/
class ArrayTest {
	public static void main(String[] args) {
		//定義數組
		int[] arr = {11,22,33,44,55};
		
		//獲取每一個元素
		//如何獲取呢?我們知道數組名結合編號(索引)就可以找到數據
		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("--------------------");
		
		//雖然這種做法可以,但是不是我想要的
		//我們發現,代碼的重複度很高
		//輸出語句,數組名都是相同的,僅僅是索引是變化的
		//我們就可以使用循環搞定索引值
		for(int x=0; x<5; x++) {
			//x=0,1,2,3,4
			System.out.println(arr[x]);
		}
		System.out.println("--------------------");
		
		//從0開始我們是明確的,但是爲什麼到5呢,我們是數了一下數組的個數
		//繼續看下個數組如何遍歷
		int[] arr2 = {1,2,3,4,5,6,7,8,9,10,11,2,2,3,4,5,7,8,5,3,5,6,8,7,8,5,3,5,6,8,7,8,5,3,5,6,8,7,8,5,3,5,6,8,7,8,5,3,5,6,8};
		//而我們在很多時候,數組的元素不能靠數
		//這個時候,數組就給我們提供了一個屬性:length專門用於獲取數組的長度
		//格式:數組名.length 返回數組的長度
		System.out.println(arr.length);
		System.out.println(arr2.length);
		System.out.println("--------------------");
		
		//改進第一個程序
		for(int x=0; x<arr.length; x++) {
			System.out.println(arr[x]);
		}
		System.out.println("--------------------");
		
		//我們如果想要對多個數組進行遍歷,每個數組的遍歷我們都把代碼寫一遍,麻煩不
		//麻煩,所以,我們準備用方法改進。
		//用方法改進後,請調用
		printArray(arr);
		System.out.println("--------------------");
		printArray(arr2);
		System.out.println("--------------------");
		printArray2(arr);
	}
	
	/*
		遍歷數組的方法
		
		兩個明確:
			返回值類型:void
			參數列表:int[] arr
	*/
	public static void printArray(int[] arr) {
		for(int x=0; x<arr.length; x++) {
			System.out.println(arr[x]);
		}
	}
	
	//請看改進版本
	public static void printArray2(int[] arr) {
		System.out.print("[");
		for(int x=0; x<arr.length; x++) {
			if(x == arr.length-1) { //這是最後一個元素
				System.out.println(arr[x]+"]");
			}else {
				System.out.print(arr[x]+", ");
			}
		}
	}
}

數組的操作2獲取最值

/*
	數組獲取最值(獲取數組中的最大值最小值)
	
	分析:
		A:定義一個數組,並對數組的元素進行靜態初始化。
		B:從數組中任意的找一個元素作爲參照物(一般取第一個),默認它就是最大值。
		C:然後遍歷其他的元素,依次獲取和參照物進行比較,如果大就留下來,如果小,就離開。
		D:最後參照物裏面保存的就是最大值。
*/
class ArrayTest2 {
	public static void main(String[] args) {
		//定義一個數組
		int[] arr = {34,98,10,25,67};
		
		//請獲取數組中的最大值
		/*
		//從數組中任意的找一個元素作爲參照物
		int max = arr[0];
		//然後遍歷其他的元素
		for(int x=1; x<arr.length; x++) {
			//依次獲取和參照物進行比較,如果大就留下來,如果小,就離開。
			if(arr[x] > max) {
				max = arr[x];
			}
		}
		//最後參照物裏面保存的就是最大值。
		System.out.println("max:"+max);
		*/
	
		//把這個代碼用方法改進
		//調用方法
		int max = getMax(arr);
		System.out.println("max:"+max);
			
		//請獲取數組中的最小值
		int min = getMin(arr);
		System.out.println("min:"+min);
	}
	
	/*
		需求:獲取數組中的最大值
		兩個明確:
			返回值類型:int
			參數列表:int[] arr
	*/
	public static int getMax(int[] arr) {
		//從數組中任意的找一個元素作爲參照物
		int max = arr[0];
		//然後遍歷其他的元素
		for(int x=1; x<arr.length; x++) {
			//依次獲取和參照物進行比較,如果大就留下來,如果小,就離開。
			if(arr[x] > max) {
				max = arr[x];
			}
		}
		//最後參照物裏面保存的就是最大值。
		return max;
	}
	
	public static int getMin(int[] arr) {
		//從數組中任意的找一個元素作爲參照物
		int min = arr[0];
		//然後遍歷其他的元素
		for(int x=1; x<arr.length; x++) {
			//依次獲取和參照物進行比較,如果小就留下來,如果大,就離開。
			if(arr[x] < min) {
				min = arr[x];
			}
		}
		//最後參照物裏面保存的就是最小值。
		return min;
	}
}

數組的操作3逆序

/*
	數組元素逆序 (就是把元素對調)
	
	分析:
		A:定義一個數組,並進行靜態初始化。
		B:思路
			把0索引和arr.length-1的數據交換
			把1索引和arr.length-2的數據交換
			...
			只要做到arr.length/2的時候即可。
*/
class ArrayTest3 {
	public static void main(String[] args) {
		//定義一個數組,並進行靜態初始化。
		int[] arr = {12,98,50,34,76};
		
		//逆序前
		System.out.println("逆序前:");
		printArray(arr);
		
		//逆序後
		System.out.println("逆序後:");
		//reverse(arr);
		reverse2(arr);
		printArray(arr);
	}
	
	/*
		需求:數組逆序
		兩個明確:
			返回值類型:void (有人會想到應該返回的是逆序後的數組,但是沒必要,因爲這兩個數組其實是同一個數組)
			參數列表:int[] arr
	*/
	public static void reverse(int[] arr) {
		/*
		//第一次交換
		int temp = arr[0];
		arr[0] = arr[arr.length-1-0];
		arr[arr.length-1-0] = temp;
		
		//第二次交換
		int temp = arr[1];
		arr[1] = arr[arr.length-1-1];
		arr[arr.length-1-1] = temp;
		
		//第三次交換
		int temp = arr[2];
		arr[2] = arr[arr.length-1-2];
		arr[arr.length-1-2] = temp;
		*/
		//用循環改進
		for(int x=0; x<arr.length/2; x++) {
			int temp = arr[x];
			arr[x] = arr[arr.length-1-x];
			arr[arr.length-1-x] = temp;
		}
	}
	
	public static void reverse2(int[] arr) {
		for(int start=0,end=arr.length-1; start<=end; start++,end--) {
			int temp = arr[start];
			arr[start] = arr[end];
			arr[end] = 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.println(arr[x]+"]");
			}else {
				System.out.print(arr[x]+", ");
			}
		}
	}
}

數組的操作4查表法

/*
	數組查表法(根據鍵盤錄入索引,查找對應星期)
		意思是:String[] strArray = {"星期一","星期二",...};
*/
import java.util.Scanner;

class ArrayTest4 {
	public static void main(String[] args) {
		//定義一個字符串數組
		String[] strArray = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
		
		//創建鍵盤錄入對象
		Scanner sc = new Scanner(System.in);
		
		System.out.println("請輸入一個數據(0-6):");
		int index = sc.nextInt();
		
		System.out.println("你要查找的日期是:"+strArray[index]);
	}
}

數組的操作5基本查找

/*
	需求:數組元素查找(查找指定元素第一次在數組中出現的索引)
	
	分析:
		A:定義一個數組,並靜態初始化。
		B:寫一個功能實現
			遍歷數組,依次獲取數組中的每一個元素,和已知的數據進行比較
			如果相等,就返回當前的索引值。
*/
class ArrayTest5 {
	public static void main(String[] args) {
		//定義一個數組,並靜態初始化
		int[] arr = {200,250,38,888,444};
		
		//需求:我要查找250在這個數組中第一次出現的索引
		int index = getIndex(arr,250);
		System.out.println("250在數組中第一次出現的索引是:"+index);
		
		int index2 = getIndex2(arr,250);
		System.out.println("250在數組中第一次出現的索引是:"+index2);
		
		int index3 = getIndex2(arr,2500);
		System.out.println("2500在數組中第一次出現的索引是:"+index3);
	}
	
	/*
		需求:查找指定數據在數組中第一次出現的索引
		兩個明確:
			返回值類型:int
			參數列表:int[] arr,int value
	*/
	public static int getIndex(int[] arr,int value) {
		//遍歷數組,依次獲取數組中的每一個元素,和已知的數據進行比較
		for(int x=0; x<arr.length; x++) {
			if(arr[x] == value) {
				//如果相等,就返回當前的索引值。
				return x;
			}
		}
		
		//目前的代碼有一個小問題
		//就是假如我要查找的數據在數組中不存在,那就找不到,找不到,你就對應的返回嗎?
		//所以報錯。
		
		//只要是判斷,就可能是false,所以大家要細心。
		
		
		//如果找不到數據,我們一般返回一個負數即可,而且是返回-1
		return -1;
	}
	
	public static int getIndex2(int[] arr,int value) {
		//定義一個索引
		int index = -1;
		
		//有就修改索引值
		for(int x=0; x<arr.length; x++) {
			if(arr[x] == value) {
				index = x;
				break;
			}
		}
		
		//返回index
		return index;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章