1. 綜合練習
(1) 抽獎
public class test10 {public static void main(String[] args) {int[] arr = {2,588,888,1000,10000};Random r = new Random();for (int i = 0; i < arr.length; i++) {int randomIndex = r.nextInt(arr.length);int temp = arr[randomIndex];arr[randomIndex] = arr[i];arr[i] = temp;}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}
}
關鍵邏輯:
循環變量i
從 0 遍歷到數組長度 - 1,對每個位置的元素進行隨機交換操作,步驟如下:
- 生成隨機索引:
int randomIndex = r.nextInt(arr.length)
,隨機索引范圍是 0 到數組長度 - 1(此例中為 0-4)。 - 交換元素:通過中間變量
temp
實現arr[i]
和arr[randomIndex]
的位置交換 - 由于代碼僅進行元素位置的交換,沒有新增、復制或刪除元素,所以元素不會重復
(2) 雙色球中獎系統
兩大功能。具體需求如下:
號碼組成:
- 紅球:從 1-33 的整數中選擇 6 個,不可重復
- 藍球:從 1-16 的整數中選擇 1 個,可與歷史號碼重復
- 一注完整號碼包含 6 個紅球 + 1 個藍球,共 7 個數字
輸入驗證:
- 紅球必須在 1-33 范圍內,且 6 個紅球不能重復
- 藍球必須在 1-16 范圍內
- 若用戶輸入不符合規則,需提示錯誤原因并要求重新輸入
public class test11 {public static void main(String[] args) {int[] arr = createNumber();System.out.println("----------------");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();int[] userInputArr = userInputNumber();for (int i = 0; i < userInputArr.length; i++) {System.out.print(userInputArr[i] + " ");}int redCount = 0;int blueCount = 0;for (int i = 0; i < userInputArr.length - 1; i++) {int redNumber = userInputArr[i];for (int j = 0; j < arr.length - 1; j++) {if (redNumber == arr[j]) {redCount++;break;}}}int blueNumber = userInputArr[userInputArr.length - 1];if (blueNumber == arr[arr.length - 1]) {blueCount++;}System.out.println();System.out.println(redCount);System.out.println(blueCount);}public static int[] userInputNumber(){int[] arr = new int[7];Scanner sc = new Scanner(System.in);for (int i = 0; i < 6; ) {System.out.println("請輸入第" + (i + 1) + "個紅球號碼");int redNumber = sc.nextInt();if(redNumber >= 1 && redNumber <= 33){boolean flag = contains(arr, redNumber);if (!flag){arr[i] = redNumber;i++;} else{System.out.println("當前紅球號碼已經存在,請重新輸入");}} else{System.out.println("當前紅球號碼超出范圍");}}System.out.println("請輸入籃球號碼");while (true) {int blueNumber = sc.nextInt();if (blueNumber >= 1 && blueNumber <= 16){arr[arr.length - 1] = blueNumber;break;} else{System.out.println("當前藍球號碼超出范圍");}}return arr;}public static int[] createNumber(){int[] arr = new int[7];Random r = new Random();for (int i = 0; i < 6; ) {int redNumber = r.nextInt(33) + 1;boolean flag = contains(arr, redNumber);if (!flag) {arr[i] = redNumber;i++;}}int blueNumber = r.nextInt(16) + 1;arr[arr.length - 1] = blueNumber;return arr;}public static boolean contains(int[] arr, int number) {for (int i = 0; i < arr.length; i++) {if (arr[i] == number) {return true;}}return false;}
}
① 藍球輸入的無限循環,藍球輸入使用while (true)
循環,直到輸入合法才break
:
② contains() 方法:
public static boolean contains(int[] arr, int num) {for (int i = 0; i < arr.length; i++) {if (arr[i] == num) { // 這里的numreturn true;}}return false;
}
- 括號里的
num
(int num
)是形參:它是方法定義時聲明的參數,用于接收調用方法時傳入的實際值,是形參的 “定義處”。 - 代碼里的
num
(arr[i] == num
中的num
)不是新的形參:它是對前面已經定義的形參num
的 “使用”,引用的是同一個變量。
2. 二維數組
(1) 二維數組靜態初始化:
int[][] arr = {{11, 22}, {33, 44}};
(2) 二維數組遍歷
int[][] arr = {{11, 22, 33}, {44, 55, 66}};
for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j] + " ");}System.out.println();
}
(3) 二維數組動態初始化
數據類型[][] 數組名 = new 數據類型[行數][列數];
示例:
int[][] arr = new int[2][3]; // 2行3列的二維數組
arr[0] = new int[]{11, 22, 33};
arr[1] = new int[]{44, 55, 66};
- 2:表示二維數組長度為 2,可以裝 2 個一維數組
- 3:表示每一個一維數組的長度都是 3,可以裝 3 個 Int 類型的元素
(4) 計算總營業額
public class test12 {public static void main(String[] args) {int[][] yearArrArr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};int yearSum = 0;for (int i = 0; i < yearArrArr.length; i++) {int[] quarterArr = yearArrArr[i];int sum = getSum(quarterArr);System.out.println("第" + (i + 1) + "個季度的總營業額為" + sum);yearSum += sum;}System.out.println("全年總營業額為:" + yearSum);}public static int getSum(int[] arr){int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}return sum;}
}
這個程序中存在兩次遍歷,分別對應不同的層次:
① 第一次遍歷(在main
方法中)
遍歷的是二維數組的外層,目的是逐個取出每個季度的一維數組:
// 外層循環:遍歷二維數組,每次取出一個季度的一維數組
for (int i = 0; i < yearArrArr.length; i++) {int[] quarterArr = yearArrArr[i]; // 取出當前季度的一維數組// ...
}
②?第二次遍歷(在getSum
方法中)
遍歷的是單個一維數組,目的是計算這個數組中所有元素的總和