1. 程式人生 > >第7天 Java基礎語法(練習加強+在eclipse中實現)

第7天 Java基礎語法(練習加強+在eclipse中實現)

第7天 Java基礎語法 今日內容介紹  迴圈練習  陣列方法練習

第1章 迴圈練習 1.1 編寫程式求 1+3+5+7+……+99 的和值。 題目分析: 通過觀察發現,本題目要實現的奇數(範圍1-100之間)的累加和。

  1. 為了記錄累加和的值,我們需要定義一個儲存累加和的變數
  2. 我們要獲取到1-100範圍內的數
  3. 判斷當前數是否為奇數,是奇數,完成累加和操作
  4. 累加完畢後,最終顯示下累加和的值 解題步驟:
  5. 定義一個用來記錄累加和的變數
  6. 使用for迴圈語句,完成1-100之間每個數的獲取
  7. 使用if條件語句,判斷當前數是否是奇數,是奇數,進行累加和操作
  8. 使用輸出語句,列印累加和變數的值
/*
 * 1.1	編寫程式求 1+3+5+7+……+99 的和值
 * 實現步驟:
 * 		1.定義一個用來記錄累加和的變數sum
 * 		2.使用for迴圈,完成1-100之間每個奇數的獲取 
 * 			採用for(int i = 1; i < 100; i += 2)
 * 		3.在for迴圈中,與sum進行累加,求和
 * 		4.使用輸出語句,列印累加和變數的值sum
 */
public class LoopTest {

	public static void main(String[] args) {
		//1.定義一個用來記錄累加和的變數sum
		int sum = 0;
		//2.使用for迴圈,完成1-100之間每個奇數的獲取 
		for (int i = 1; i < 100; i += 2) {
			//3.在for迴圈中,與sum進行累加,求和
			sum += i;
		}
		//4.使用輸出語句,列印累加和變數的值sum
		System.out.println("1-100之間的奇數累加和:" + sum);
	}

}

在這裡插入圖片描述 1.2 輸出所有的水仙花數,所謂水仙花數是指一個數3位數,其每位數字立方和等於其本身,如153 = 111 + 333 + 555 題目分析: 通過觀察發現,本題目要實現列印符合要求的數字(即水仙花數)。

  1. 明確什麼樣的數就是水仙花數。水仙花數是指一個3位數(100-999之間),其每位數字立方之和等於該3位數本身。如153 = 111 + 333 + 555, 即 3位數本身 = 百位數立方 + 十位數立方 + 個位數立方;
  2. 獲取水仙花範圍內的所有3位數(100-999之間的每個3位數)
  3. 判斷該3位數是否滿足水仙花數,滿足,列印該3位數 解題步驟:
  4. 使用for迴圈,得到100-999之間的每個3位數
  5. 獲取3位數中百位數字、十位數字、個位數字
  6. 使用if條件語句,判斷該3位數是否滿足水仙花數,滿足,使用輸出語句,列印該3位數 在這裡插入圖片描述
/*
 * 1.2	輸出所有的水仙花數,所謂水仙花數是指一個數3位數,其每位數字立方和等於其本身,
 * 		如153 = 1*1*1 + 3*3*3 + 5*5*5
 * 實現步驟:
 * 		1.定義變數儲存 三個數位的整數int
 * 		2.利用迴圈,迴圈中的變數,從100變化到999
 * 		3.在迴圈中得到的三位數,拆解成三個獨立的數位
 * 		4.將三個數位的各自立方求和計算,求和後的數,用if條件語句
 * 			與她自己進行匹配,符合就是水仙花數,否則繼續迴圈遍歷
 * 		5.當找到水仙花數,用輸出列印該水仙花數
 */
public class LoopTest1 {

	public static void main(String[] args) {
		//1.定義變數儲存 三個數位的整數int
		int bai = 0;
		int shi = 0;
		int ge = 0;
		//2.利用迴圈,迴圈中的變數,從100變化到999
		for (int i = 100; i <= 999; i++) {
			//3.在迴圈中得到的三位數,拆解成三個獨立的數位
			bai = i / 100;
			
			shi = i / 10 % 10;
			
			ge = i % 10;
			
			//4.將三個數位的各自立方求和計算,求和後的數,用if條件語句
			// 	與她自己進行匹配,符合就是水仙花數,否則繼續迴圈遍歷
			if(bai * bai * bai + shi * shi * shi + ge * ge * ge == i){
				//5.當找到水仙花數,用輸出列印該水仙花數
				System.out.println("水仙花數:" + i);
			}
		}
	}

}

在這裡插入圖片描述 1.3 ASCII編碼表 American Standard Code for Information Interchange,美國標準資訊交換程式碼. 數字0-9對應ASCII編碼十進位制為48-57, 字母a-z對應ASCII編碼十進位制為97-122,字母A-Z對應ASCII編碼十進位制為65-90

/*
 * 1.3 char型別儲存
 * 數字0-9對應ASCII編碼十進位制為48-57, 
 * 字母a-z對應ASCII編碼十進位制為97-122,
 * 字母A-Z對應ASCII編碼十進位制為65-90	
 * a.取值範圍
 * 		short:佔兩個位元組,是有符號資料,取值範圍-2^15 - 2^15 (-32767-32767)
 *		char:佔兩個位元組,是無符號資料,取值範圍0-2^16	(0-65536) 		
 * b.型別轉換
 * 		char型別的資料參加運算時,需要轉換成int資料型別
 * c.案例程式碼
 * 		ASCII編碼表演示
 * 			字元JAVA 資料型別,char
 * 			整數JAVA 資料型別,int
 * 		
 * 		int型別 和char資料型別轉換
 * 		char兩個位元組,int四個位元組
 * 
 * 		char轉成int資料型別的時候,型別自動提升,char資料型別,會查詢編碼表,得到整數
 * 		int轉成char型別的時候,需要強制型別轉換,會查詢編碼表
 * 
 * 		char儲存漢字,查詢Unicode編碼表
 * 
 * 		char可以和int計算,提升為int型別,記憶體中兩個位元組
 * 	
 */
public class LoopTest2 {

	public static void main(String[] args) {
		char c = 'a';
		int i = c + 1;
		System.out.println(i);
		
		int j = 90;
		char h = (char) j;
		System.out.println(h);
		
		System.out.println((char)6);
		
		char k = '你';
		System.out.println(k);
		
		//char m = -1;
	}

}

在這裡插入圖片描述 1.4 利用for迴圈列印ABCDEFG…XYZ,26個大寫字母與26個小寫字母 題目分析: 通過觀察發現,本題目要實現列印26個大寫字母、26個小寫字母

  1. 一共26個大小寫字母,那麼,可以考慮迴圈26次。在每次迴圈中,完成指定字母的大小寫列印
  2. 找出ABCDEFG…XYZ這些字母之間的變化規律 通過ASCII表發現,後面的字母比它前面的字母,ASCII值大1 下一個字母 = 上一個字母 + 1 如: A B C D 65 66 67 68
    1. 在每次迴圈中列印上一個字母大小寫,並指定下一個字母 解題步驟:
  3. 定義初始化大寫變數,值為’A’; 初始化小寫變數,值為’a’
  4. 使用for迴圈,進行26次迴圈
  5. 在每次迴圈中,列印大寫字母、小寫字母。 每次列印完成後,更新大寫字母值、小寫字母值
/*
 * 1.4	利用for迴圈列印ABCDEFG...XYZ,26個大寫字母與26個小寫字母
 * 實現步驟:
 * 		1.定義初始化大寫變數,值為'A';初始化小寫變數,值為'a'
 * 		2.使用for迴圈,進行26次迴圈
 * 		3.在每次迴圈的過程中,列印大寫字母和小寫字母(與此同時,更新大寫字母,小寫字母)
 */
public class LoopTest3 {

	public static void main(String[] args) {
		//1.定義初始化大寫變數,值為'A';初始化小寫變數,值為'a'
		char da = 'A';
		char xiao = 'a';
		//2.使用for迴圈,進行26次迴圈
		for (int i = 0; i < 26; i++) {
			//3.在每次迴圈的過程中,列印大寫字母和小寫字母(與此同時,更新大寫字母,小寫字母)
			System.out.println("大寫字母:" + da + " 小寫字母:" + xiao);
			da++;
			xiao++;
		}
	}

}

在這裡插入圖片描述 1.5 利用for迴圈列印 9*9 表? 如:

 		1*1=1
		1*2=2  2*2=4
		1*3=3  2*3=6  3*3=9

在這裡插入圖片描述

import java.util.Scanner;

/*
 * 1.5	利用for迴圈列印 9*9 表?
 * 實現步驟:
 * 		1.定義一個外層for迴圈,初始值從1開始,迴圈9次,用來控制列印的行數
 * 		2.在外層for迴圈內部,定義一個for迴圈,
 * 		     初始值從1開始,迴圈次數與當前行數相等,用來完成每行列印指定次數的乘法公式
 * 		3.在內層for迴圈中,完成每行指定次數的乘法公式列印
 * 		4.在外層for迴圈中,當每行指定次數的乘法公式列印完畢後,通過System.out.println();切換到下一行
 * 			這樣,再次列印乘法公式時,就在下一行輸出列印了
 */
public class LoopTest4 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//列印n * n乘法表
		System.out.println("請輸入你想列印乘法表的維數:");
		int index = sc.nextInt();
		System.out.println("如下列印:" + index + " * " + index + " 乘法表");
		print99(index);
	}
	public static void print99(int index){
		//1.定義一個外層for迴圈,初始值從1開始,迴圈index次,用來控制列印的行數
		for (int i = 1; i <= index; i++) {
			//2.在外層for迴圈內部,定義一個for迴圈
			for (int j = 1; j <= i; j++) {
				//3.在內層for迴圈中,完成每行指定次數的乘法公式列印
				System.out.print(j + " * " + i + " = " + i * j + "\t");
			}
			//4.在外層for迴圈中,當每行指定次數的乘法公式列印完畢後,通過System.out.println();
			System.out.println();
		}
	}
}

在這裡插入圖片描述 第2章 陣列方法練習 2.1 定義列印陣列元素方法,按照給定的格式列印[11, 33, 44, 22, 55] 題目分析: 通過觀察發現,本題目要實現按照指定格式,列印陣列元素操作

  1. 通過迴圈,我們可以完成陣列中元素的獲取,陣列名[索引]
  2. 觀察發現,每個陣列元素之間加入了一個逗號”,”進行分隔;並且,整個陣列的前後有一對中括號”[]”包裹陣列所有元素。 解題步驟:
  3. 使用輸出語句完成列印 左邊的中括號”[”
  4. 使用迴圈,輸出陣列元素值。輸出元素值分為兩種情況,如下: a) 最後一個數組元素,加上一個右邊的中括號”]” b) 非最後一個數組元素,加上一個逗號”,”
/*
 * 2.1	定義列印陣列元素方法,按照給定的格式列印[11, 33, 44, 22, 55]
 * 實現步驟:
 * 		1.定義方法實現陣列的遍歷
 * 		2.先列印括號--[
 * 		3.遍歷陣列
 * 				判斷是否遍歷到了陣列的最後一個元素,如果是最後一個元素,輸出括號]
 * 				(這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行,
 * 				否則:輸出陣列的元素和逗號(這樣列印元素,不需要換行,保證元素顯示在同一行))
 */
public class ArrayMethodTest {

	public static void main(String[] args) {
		//1.定義一個數組
		int[] arr = {11, 33, 44, 22, 55};
		print(arr);
	}
	/*
	 * 定義方法實現陣列的遍歷
	 * 返回值:void
	 * 引數:陣列
	 */
	public static void print(int[] arr){
		//1.列印括號[ 不要換行
		System.out.print("[");
		//2.遍歷陣列
		for(int i = 0; i < arr.length; i++){
			//3.判斷是否遍歷了陣列的最後一個元素,如果是最後一個元素,輸出括號]
			if(i == arr.length -1){
				//3.1.這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行
				System.out.println(arr[i] + "]");
			}else{
				//3.1.2這樣列印元素,不需要換行,保證元素顯示在同一行
				System.out.print(arr[i] + ",");
			}
		}	
	}
}

在這裡插入圖片描述 2.2 陣列元素逆序 在這裡插入圖片描述

/*
 * 2.2	陣列元素逆序
 * 實現步驟:
 * 		1.利用for迴圈,實現陣列遍歷,遍歷過程中,最遠端換位
 * 		2.for的第一項,定義兩個變數,判斷條件:min <= max,增量min++,max--
 * 			min索引和max索引的元素進行交換
 * 			(使用臨時的第三方變數進行換成min索引對應元素,之後在賦值給max索引對應元素)
 */
public class ArrayMethodTest1 {

	public static void main(String[] args) {
			//1.定義一個數組
			int[] arr = {11, 33, 44, 22, 55};
			//2.先列印一把陣列,看陣列正常
			print(arr);
			//3.將陣列逆序
			reverse(arr);
			//4.檢視陣列逆序後的情況
			print(arr);
	}
	/*
	 * 定義方法實現陣列的遍歷
	 * 返回值:void
	 * 引數:陣列
	 */
	public static void print(int[] arr){
		//1.列印括號[ 不要換行
		System.out.print("[");
		//2.遍歷陣列
		for(int i = 0; i < arr.length; i++){
			//3.判斷是否遍歷了陣列的最後一個元素,如果是最後一個元素,輸出括號]
			if(i == arr.length -1){
				//3.1.這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行
				System.out.println(arr[i] + "]");
			}else{
				//3.1.2這樣列印元素,不需要換行,保證元素顯示在同一行
				System.out.print(arr[i] + ",");
			}
		}	
	}
	/*
	 * 定義方法,實現陣列的逆序
	 * 返回值:void
	 * 引數:陣列
	 */
	public static void reverse(int[] arr){
		//利用迴圈,實現陣列遍歷,遍歷過程中,最遠端換位
		//for的第一項,定義兩個變數
		for (int min = 0,max = arr.length -1; min <= max; min++,max--) {
			//對陣列中的元素,進行位置交換
			//min索引和max索引的元素進行交換
			//定義變數,儲存min索引
			int temp = arr[min];
			//max索引上的元素,賦值給min索引
			arr[min] = arr[max];
			//將臨時變數中快取的資料,賦值給max序列
			arr[max] = temp;
		}
	}
	
}

在這裡插入圖片描述 2.3 陣列元素選擇排序 在這裡插入圖片描述

/*
 * 陣列的排序:一般是升序,元素,從小到大的排列
 * 
 * 兩種排序的方式:
 * 			選擇排序:陣列的每個元素都進行比較
 * 			氣泡排序:陣列中的相鄰元素進行比較
 * 			規則:比較大小,位置交換
 * 
 */
public class ArrayMethodTest2 {
	public static void main(String[] args) {
			//1.給定一個需要排序的陣列
			int[] arr = {3,1,5,-8,0,9,2};
			//2.呼叫選擇排序方法
			selectSort(arr);
			//3.實現陣列的遍歷列印
			print(arr);
	}
	/*
	 * 定義方法實現陣列的選擇排序
	 * 返回值:void
	 * 引數:陣列
	 */
	public static void selectSort(int[] arr){
		//外迴圈,選擇排序,外迴圈需要arr.length-1次數
		for(int i = 0; i < arr.length - 1;i++){
			//內迴圈,是每次都在減少,修改變數定義
			for(int j = i + 1; j < arr.length;j++){
				//陣列的元素進行判斷,從小到大的順序,排列的陣列中的元素
				if(arr[i] > arr[j]){
					//陣列中元素交換位置
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
	}
	/*
	 * 定義方法實現陣列的遍歷
	 * 返回值:void
	 * 引數:陣列
	 */
	public static void print(int[] arr){
		//1.列印括號[ 不要換行
		System.out.print("[");
		//2.遍歷陣列
		for(int i = 0; i < arr.length; i++){
			//3.判斷是否遍歷了陣列的最後一個元素,如果是最後一個元素,輸出括號]
			if(i == arr.length -1){
				//3.1.這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行
				System.out.println(arr[i] + "]");
			}else{
				//3.1.2這樣列印元素,不需要換行,保證元素顯示在同一行
				System.out.print(arr[i] + ",");
			}
		}	
	}
}

在這裡插入圖片描述 2.4 陣列元素氣泡排序

/*
 * 陣列的氣泡排序法:陣列的相鄰元素進行比較大小,交換位置
 * N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i-1)次(i = 0,1,2)
 * 所以可以用雙重迴圈語句,外層控制迴圈多少趟,內層控制每一趟的迴圈次數
 * 實現步驟:
 * 		1.進行外迴圈,氣泡排序,外迴圈需要arr.length-1次數
 * 		2.進行內迴圈,內迴圈進行相鄰元素大小比較,根據升序交換位置,內迴圈結束一趟,出來一個最大值
 * 			等又一次外迴圈,已經出來的最大的數,就無需進行納入比較中,但是,其他繼續相鄰元素比較大小,
 * 			直至所有最大的數出來
 */
public class ArrayMethodTest3 {

	public static void main(String[] args) {
		//1.給定一個需要排序的陣列
		int[] arr = {3,1,5,-8,0,9,2};
		//2.呼叫氣泡排序方法
		bubbleSort(arr);
		//3.實現陣列的遍歷列印
		print(arr);
	}
	/*
	 * 氣泡排序法
	 * 返回值:void
	 * 引數:陣列
	 * N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i-1)次 (i = 0,1,2)
	 */
	public static void bubbleSort(int[] arr){
		//1.進行外迴圈,氣泡排序,外迴圈需要arr.length-1次數,總共進行N-1趟排序
		for(int i = 0; i < arr.length - 1; i++){
			//2.進行內迴圈,內迴圈進行相鄰元素大小比較,每i趟的排序次數為(N-i-1)次
			//故內迴圈:判斷條件為:j < arr.length - 1 - i
			for(int j = 0; j < arr.length - 1 - i;j++){
				//3.根據升序交換位置
				if(arr[j] > arr[j+1]){
					//4.進行交換陣列中的元素位置
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
	}
	/*
	 * 定義方法實現陣列的遍歷
	 * 返回值:void
	 * 引數:陣列
	 */
	public static void print(int[] arr){
		//1.列印括號[ 不要換行
		System.out.print("[");
		//2.遍歷陣列
		for(int i = 0; i < arr.length; i++){
			//3.判斷是否遍歷了陣列的最後一個元素,如果是最後一個元素,輸出括號]
			if(i == arr.length -1){
				//3.1.這裡列印最後一個元素需要換行,保證下次呼叫方法,不會顯示在同一行
				System.out.println(arr[i] + "]");
			}else{
				//3.1.2這樣列印元素,不需要換行,保證元素顯示在同一行
				System.out.print(arr[i] + ",");
			}
		}	
	}

}

在這裡插入圖片描述 在這裡插入圖片描述 2.5 陣列元素普通查詢 2.6 陣列元素二分查詢(折半查詢) 在這裡插入圖片描述

/*
 * 二分查詢法:
 * 		在一個數組中,找到一個元素,是否存在於陣列中,如果存在,就返回索引
 *實現步驟:
 *		1.三個指標變數mid min max
 *		2.進行迴圈折半:可以折半的條件min <= max (需要用到的迴圈體是while迴圈體-因為不知道具體需要多少次遍歷)
 *		3.迴圈體中,公式計算中間索引		
 *		4.迴圈體中,讓被查詢的元素與中間的索引所對應的元素進行比較:
 *			4.1.key < arr[mid]: max = mid - 1
 *			4.2.key > arr[mid]: min = mid + 1
 *			4.3.key == arr[mid]:return mid
 *		5.若迴圈體結束,元素沒有找到,沒有找到索引,需要返回-1,代表元素沒有找到
 * 普通查詢法:
 * 		找到元素在陣列中出現的索引,如果沒有這個元素,結果就是負數
 */
public class findArrayTest {

	public static void main(String[] args) {
		//1.給定一個已經排好序的陣列
		int[] arr = {1,2,3,4,5};
		//2.呼叫二分查詢法
		int index = binarySearch(arr,4);
		if(index != -1){
			System.out.println("陣列中查詢到該元素,該元素的索引為:" + index);
		}else{
			System.out.println("陣列中沒有找到該元素!");
		}	
		//3.普通查詢
		int index1 = search(arr,4);
		if(index1 != -1){
			System.out.println("陣列中查詢到該元素,該元素的索引為:" + index1);
		}else{
			System.out.println("陣列中沒有找到該元素!");
		}	
	}
	/*
	 * 定義方法,實現折半查詢
	 * 返回值:索引
	 * 引數:陣列,需要查詢的元素
	 */
	public static int binarySearch(int[] arr,int key){
		//1.三個指標變數mid min max
		int min = 0;
		int max = arr.length - 1;
		int mid = 0;
		//2.進行迴圈折半:可以折半的條件min <= max (需要用到的迴圈體是while迴圈體-因為不知道具體需要多少次遍歷)
		while(min <= max){
			//3 公式計算中間索引
			mid = (min + max) / 2;
			//4.迴圈體中,讓被查詢的元素與中間的索引所對應的元素進行比較:
			if(key < arr[mid]){
				 //4.1.key < arr[mid]: max = mid - 1
				 max = mid - 1;
			}else if(key > arr[mid]){
				//4.2.key > arr[mid]: min = mid + 1
				 min = mid + 1;
			}else{
				//4.3.key == arr[mid]:return mid
				return mid;
			}
		}
		//5.迴圈體結束,元素沒有找到,需要返回-1,代表元素沒有找到
		return -1;
	}
	/*
	 * 定義方法,實現陣列的普通查詢
	 * 返回值:索引int
	 * 引數:陣列,查詢的元素
	 * 實現步驟:
	 * 		1.for迴圈遍歷陣列
	 * 		2.遍歷過程中,遍歷陣列中的元素與查詢的元素進行比較
	 * 			符合:返回索引
	 * 			不符合:繼續遍歷陣列,直至結束
	 * 		3.若遍歷結束,沒有找到索引,返回-1,代表陣列中沒有該元素
	 */
	public static int search(int[] arr,int key){
		//1.for迴圈遍歷陣列
		for (int i = 0; i < arr.length; i++) {
			//2.遍歷過程中,遍歷陣列中的元素與查詢的元素進行比較
			if(arr[i] == key){
				return i;
			}
		}
		//3.若遍歷結束,沒有找到索引,返回-1,代表陣列中沒有該元素
		return -1;
	}
}

在這裡插入圖片描述