0x00 概述
本文主要涉及Java IDE工具IntelliJ的Debug使用和一些Java基礎練習。
0x01 Debug模式
1.1 什么是Debug模式
是提供給程序員的程序測試調試工具,它可以用於查看程序的執行流程,也可以用於追蹤程序執行過程,以方便調試程序。
1.2 Debug模式操作流程
- 如何加斷點,選擇斷點執行的代碼行,在行號的區域后面單擊鼠標左鍵即可
- 如何運行加斷點的程序,在代碼區右鍵選擇Debug運行
- 在哪里看,在Debuuger模式下的窗口觀察,看Console窗口
- 點哪里,點擊Step Into(F7)這個箭頭,也可以直接按F7繼續執行
- 如何刪除斷點,選擇要刪除的斷點,點擊鼠標左鍵即可
- 如果是多個斷點,可以每一個再點擊一次,也可以一次性全部刪除(點擊下圖中的兩個重疊圓圈圖標)
0x02 基礎練習
2.1 減肥計划if版本
需求:輸入星期數,顯示今天的減肥活動,周一:跑步,周二:游泳,周三:慢走,周四:動感單車,周五:拳擊,周六:爬山,周日:吃頓好的
示例:
import java.util.Scanner; /* * 思路: * 1. 鍵盤錄入一個星期數,用一個變量接收 * 2. 對星期數進行判斷,這里用if語句實現 * 3. 在對應的語句控制中輸出對應的減肥活動 */ public class practise1 { public static void main(String[] args) { // 鍵盤輸入一個星期數,使用一個int變量接收 Scanner sc = new Scanner(System.in); System.out.println("請輸入一個星期數: "); int weeknum = sc.nextInt(); if (weeknum < 1 || weeknum > 7) { System.out.println("你輸入的星期數有誤。"); } else if (weeknum == 1) { System.out.println("跑步"); } else if (weeknum == 2) { System.out.println("游泳"); } else if (weeknum == 3) { System.out.println("慢走"); } else if (weeknum == 4) { System.out.println("動感單車"); } else if (weeknum == 5) { System.out.println("拳擊"); } else if (weeknum == 6) { System.out.println("爬山"); } else { System.out.println("吃頓好的"); } } }
2.2 減肥計划switch版本
需求:輸入星期數,顯示今天的減肥活動,周一:跑步,周二:游泳,周三:慢走,周四:動感單車,周五:拳擊,周六:爬山,周日:吃頓好的
示例
/* * 思路: * 1. 鍵盤錄入一個星期數,用一個變量接收 * 2. 對星期數進行判斷,這里用switch語句實現 * 3. 對應的語句控制中輸出對應的減肥活動 * * 導包: * 1. 手動導包 import java.util.Scanner; * 2. 快捷鍵導包, Alt+Enter; * 3. 自動導包 */ import java.util.Scanner; public class practise2 { public static void main(String[] args) { // 鍵盤錄入一個星期數,用一個變量接收 Scanner sc = new Scanner(System.in); System.out.println("請輸入一個星期數: "); int weeknum = sc.nextInt(); // 對星期數進行判斷,這里用switch語句實現 switch (weeknum) { case 1: System.out.println("跑步"); break; case 2: System.out.println("游泳"); break; case 3: System.out.println("慢走"); break; case 4: System.out.println("動感單車"); break; case 5: System.out.println("拳擊"); break; case 6: System.out.println("爬山"); break; case 7: System.out.println("吃頓好的"); break; default: System.out.println("輸入的星期數有誤"); } } }
2.3 逢七跳過
需求:這個游戲叫逢七過,從任意一個數字開始報數,當你要報的數字包含7或者是7的倍數的時候說:過!遍歷1-100之間滿足逢七過規則的數據。
示例:
/* 思路: 1. 數據在1-100之間,用for循環實現數據的獲取 2. 根據規則,用if語句實現數據的判斷,要么是個位是7,要么十位是7,要么能夠被7整除 3. 在控制台輸出滿足規則的數據 */ public class practise3 { public static void main(String[] args) { // 數據在1-100之間,用for循環實現數據的獲取 for (int i = 1; i < 101; i++) { // 根據游戲規則,能被7整除,十位是7或者個位是7 if (i % 7 == 0 || i % 10 == 7 || i / 10 % 7 == 0) { // 在控制台輸出滿足規則的數據 System.out.println(i); } } } }
2.4 不死神兔
需求:有一對兔子,從出生后第三個月起每個月都生一對兔子,小兔子長大到第三個月后每個月又生一對兔子,假如兔子不會死,問第二十個月的兔子有多少對
示例:
/* 思路: 1. 為了存儲每個月的兔子的對數,定義一個數組,用動態初始化完成數組元素的初始化,數組長度為20 2. 因為第一個月,第二個月兔子的對數是已知的,都是1,所以數組的第一個元素和第二個元素也都是1 3. 用循環實現計算每個月兔子的對數 4. 輸出數組中最后一個元素的值,就是第20個月兔子的對數 */ public class practise4 { public static void main(String[] args) { // 為了存儲每個月兔子的對數,定義一個數組,長度20,使用動態初始化 int[] arr = new int[20]; // 因為第一個月和第二個月兔子對數都是1,所以數組前兩個元素的值也是1 arr[0] = 1; arr[1] = 2; // 用循環實現計算每個月的兔子對數 for (int i = 2; i < arr.length; i++) { arr[i] = arr[i - 1] + arr[i - 2]; } // 輸出數組中最后一個元素的值,就是第20個月的兔子的對數,對應的index是19 System.out.println(arr[19]); } }
2.5 百錢百雞
需求:我國古代數學家張丘在《算經》一書中提出的數學問題:雞翁
示例:
/* 思路: 1. 第一層循環,用於表示雞翁的范圍,初始化表達式的變量定義為x=0,判斷條件是x<=20; 2. 第二層循環,用於表示雞母的范圍,初始化表達式的變量定義為y=0,判斷條件是y<=33; 3. 這個時候,用於表示雞雛的變量z = 100-x-y; 4. 判斷表達式 z%3==0 和 表達式 5*x + 3*y + z/3 =100 是否同時成立,如果成立,輸出對應的x y z的值,此處是計算買雞的錢 */ public class practise5 { public static void main(String[] args) { // 第一層循環,用於表示雞翁的范圍,初始化表達式的變量定義為x=0,判斷條件是x<=20; for (int x = 0; x < 21; x++) { // 第二層循環,用於表示雞母的范圍,初始化表達式的變量定義為y=0,判斷條件是y<=33; for (int y = 0; y < 34; y++) { // 以上確定了雞翁和雞母的范圍,x和y已固定,這時候用於表示雞雛的變量z=100-x-y; int z = 100 - x - y; // 判斷表達式 z%3==0和表達式 5*x + 3*y +z/3 =100 是否同時成立 if (z % 3 == 0 && 5 * x + 3 * y + z / 3 == 100) { System.out.println("購買: "); System.out.println("雞翁" + x + "只"); System.out.println("雞母" + y + "只"); System.out.println("雞雛" + z + "只"); System.out.println("----------------------"); } } } } }
2.6 數組元素求和
需求:有這樣的一個數組,元素是{68,27,95,88,171,996,51,210}。求出該數組中滿足要求的元素和, 要求是:求和的元素個位和十位都不能是7,並且只能是偶數
示例:
/* 思路: 1. 定義一個數組,用靜態初始化完成數組元素的初始化 2. 定義一個求和變量,初始值是0 3. 遍歷數組,獲取到數組中的每一個元素 4. 判斷該元素是否滿足條件,滿足的話就累加到求和變量 5. 輸出求和變量的值 */ public class practise6 { public static void main(String[] args) { // 定義一個數組,用靜態初始化完成數組元素的初始化 int[] arr = {68, 27, 95, 88, 171, 996, 51, 210}; // 定義一個求和變量,初始值是0 int sum = 0; // 遍歷數組,獲取數組中的每一個元素 for (int x = 0; x < arr.length; x++) { if (arr[x] % 10 != 7 && arr[x] / 10 % 10 != 7 && arr[x] % 2 == 0) { sum += arr[x]; } } // 輸出求和變量的值 System.out.println("sum: " + sum); } }
2.7 判斷兩個數組是否相同
需求:定義一個方法,用於比較兩個數組的內容是否相同
示例:
/* 思路: 1. 定義兩個數組,分別使用靜態初始化完成數組元素的初始化 2. 定義一個方法,用於比較兩個數組的內容是否相同 3. 比較兩個數組的內容是否相同,按照下面的步驟實現: 首先比較數組長度,如果長度都不宜相同,返回false 其次遍歷數組,比較兩個數組中的每個元素,只要有元素不相同,返回false 最后循環遍歷結束,返回true 4. 調用方法,使用變量接收 5. 輸出結果 */ public class practise7 { public static void main(String[] args) { // 定義兩個數組,分別使用靜態初始化完成數組元素的初始化 int[] arrX = {11, 22, 33, 44, 55}; //int[] arrY = {11, 22, 33, 44, 55}; int[] arrY = {11,22,33,44,5}; // 調用方法,使用boolean變量接收 boolean flag = compare(arrX, arrY); // 輸出結果 System.out.println(flag); } /* 定義一個方法,用於比較兩個數組的內容是否相同 兩個明確: 返回值類型:boolean 參數:int[] arr1, int[] arr2 */ public static boolean compare(int[] arr1, int[] arr2) { if (arr1.length != arr2.length) { return false; } // 其次遍歷,比較兩個數組中的每一個元素,只要有元素不相同,就返回false for (int i = 0; i < arr1.length; i++) { if (arr1[i] != arr2[i]) { return false; } } return true; } }
2.8 查找元素在數組中出現的索引
需求:已知一個數組arr={19, 28, 37, 46, 50};鍵盤錄入一個數據,查找該數據在數組中的索引。並在控制台輸出找到的數值的索引值,如果沒找到數值,則輸出-1
案例:
import java.util.Scanner; /* 思路: 1. 定義一個數組,用靜態初始化完成數組元素的初始化 2. 鍵盤錄入要查找的數據,用一個變量接收 3. 定義一個變量索引,初始值為1 4. 遍歷數組,獲取到數組中的每一個元素 5. 拿鍵盤錄入的數據和數組中的每一個元素進行比較,如果值相同,就把該值對應的索引賦值給索引變量,並結束循環 6. 輸出索引變量 */ public class practise8 { public static void main(String[] args) { // 定義一個數組,用靜態初始化完成數組元素的初始化 int[] arr = {19, 28, 37, 46, 50}; // 鍵盤錄入要查找的數據,用一個變量接收 Scanner sc = new Scanner(System.in); System.out.println("請輸入要查找的數據: "); int number = sc.nextInt(); // 調用方法 int index = getIndex(arr, number); // 輸出索引變量 System.out.println("Index: " + index); // 查找指定的數據在數組中的索引 /* 兩個明確: 返回值類型 int 參數 int[] arr, int number */ } public static int getIndex(int[] arr, int number) { // 默認index變量為-1 int index = -1; // 遍歷數組,比較輸入的number和數組的每個元素 for (int i = 0; i < arr.length; i++) { if (arr[i] == number) { index = i; break; } } // 返回索引 return index; } }
2.9 數組元素反轉
需求:已知一個數組arr={19,28,37,46,59};用程序實現把2數組中的元素交換,交換后的數組arr為原來的數組倒敘,並在控制台輸出。
案例:
/* 思路: 1. 定義一個數組,用靜態初始化完成數組元素的初始化 2. 循環遍歷數組,這一次初始化語句定義兩個索引變量,判斷條件是開始索引小於等於結束索引 3. 變量交換 4. 遍歷數組 */ public class practise9 { public static void main(String[] args) { // 定義一個數組,用靜態初始化完成數組元素的初始化 int[] arr = {19, 28, 37, 46, 50}; // 調用反轉方法 reverse(arr); // 遍歷數組 printArray(arr); } /* 兩個明確: 返回值類型: void 參數: int[] arr */ public static void reverse(int[] arr) { // 循環遍歷數組,使用兩個索引變量,分別對應開始索引和結束索引,判斷條件是開始索引小於等於結束索引 for (int start = 0, end = arr.length - 1; start <= end; start++, end--) { int tmp = arr[start]; arr[start] = arr[end]; arr[end] = tmp; } } public static void printArray(int[] arr) { System.out.print("["); for (int x = 0; x < arr.length; x++) { if (x == arr.length - 1) { System.out.print(arr[x] + "]"); } else { System.out.print(arr[x] + ","); } } } }
2.10 評委打分
需求:在編程競賽中,有6個評委為參賽的選手打分,分數為0-100的整數分。選手的最后得分為去掉一個最高分,去掉一個最低分,然后取剩下4個評委分數的均值。
案例:
import java.util.Scanner; /* 思路: 1. 定義一個數組,用動態初始化完成數組元素的初始化,長度為6 2. 鍵盤錄入6位評委的分數 3. 使用循環接收每一個評委的分數 4. 定義方法實現獲取數組中的最高分,調用方法 5. 定義方法實現獲取數組中的最低分,調用方法 6. 定義方法實現獲取數組中的所有元素的和,調用方法 7. 按照計算規則計算出平均分 8. 輸出平局分 */ public class practise10 { public static void main(String[] args) { // 定義一個數組,長度位6,用動態初始化方法完成數組元素的初始化 int[] arr = new int[6]; // 鍵盤錄入評委分數 Scanner sc = new Scanner(System.in); // 使用for循環接收6位評委的分數 for (int x = 0; x < arr.length; x++) { System.out.println("請輸入第" + (x + 1) + "位評委的分數"); arr[x] = sc.nextInt(); } // printArray(arr); // 定義方法實現獲取數組中的最高分 int max = getMax(arr); // 定義方法實現獲取數組中的最低分 int min = getMin(arr); // 定義方法求和 int sum = getSum(arr); // 計算平均分 int avg = (sum - max - min) / (arr.length - 2); // 輸出平均分 System.out.println("選手的最終得分為: " + avg); } /* 兩個明確: 返回值類型: int 參數: int[] arr */ public static int getSum(int[] arr) { int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } return sum; } public static int getMax(int[] arr) { int max = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } } return max; } public static int getMin(int[] arr) { int min = arr[0]; for (int i = 0; i < arr.length; i++) { if (arr[i] < min) { min = arr[i]; } } return min; } public static void printArray(int[] arr) { System.out.print("["); for (int i = 0; i < arr.length; i++) { if (arr[i] == arr.length - 1) { System.out.print(arr[i] + "]"); } else { System.out.print(arr[i] + ","); } } } }