Java程式設計基礎:陣列詳解
在Java程式設計中,陣列是一塊連續固定大小的記憶體空間,用於儲存相同型別的多個元素。陣列提供了索引的概念,允許透過索引訪問和運算元組中的元素。本文將詳細探討Java中陣列的定義、初始化、使用和示例。
陣列的定義和初始化
陣列在定義時需要指定資料型別和陣列名。
定義陣列的語句格式
資料型別[] 陣列名; // 推薦
資料型別 陣列名[];
如果只定義陣列而不初始化,相當於一個變數沒有值,不能直接使用。
如何對陣列進行初始化?
- 動態初始化:指定陣列大小,陣列中的預設值由Java虛擬機器(JVM)賦值。
- 靜態初始化:指定元素值,由JVM根據給定的值的數量設定陣列大小。
動態初始化語句定義格式
資料型別[] 陣列名 = new 資料型別[元素的個數];
一維陣列
動態初始化
int[] numbers = new int[5]; // 建立一個長度為5的整型陣列,元素預設值為0
靜態初始化
int[] numbers = {1, 2, 3, 4, 5}; // 建立一個長度為5的整型陣列,元素為1到5
二維陣列
二維陣列的元素是一維陣列。
定義格式1
資料型別[][] 陣列名 = new 資料型別[m][n];
舉例
int[][] arr = new int[2][3]; // 建立一個2行3列的二維整型陣列
定義格式2
資料型別[][] 陣列名 = new 資料型別[m][];
舉例
int[][] arr = new int[2][]; // 建立一個2行不指定列的二維整型陣列
arr[0] = new int[]{11, 222, 33, 44};
arr[1] = new int[]{100, 200};
定義格式3
資料型別[][] 陣列名 = new 資料型別[][]{{元素1,元素2...},{元素1,...},...};
舉例
int[][] arr = new int[][]{{11,22,33,44},{100,200}}; // 建立一個二維整型陣列
簡化寫法
int[][] arr = {{11,22,33,44},{100,200}}; // 簡化寫法
程式碼示例
public class ArrayExample {
public static void main(String[] args) {
// 一維陣列
int[] numbers = new int[]{1, 2, 3, 4, 5}; // 靜態初始化
System.out.println("One-dimensional array:");
for(int number : numbers) {
System.out.println(number);
}
// 二維陣列
int[][] matrix = new int[2][3]; // 動態初始化
matrix[0][0] = 11;
matrix[0][1] = 12;
matrix[0][2] = 13;
matrix[1][0] = 21;
matrix[1][1] = 22;
matrix[1][2] = 23;
System.out.println("\nTwo-dimensional array:");
for(int[] row : matrix) {
for(int element : row) {
System.out.print(element + " ");
}
System.out.println();
}
}
}
陣列相關練習題
習題一
//使用陣列輸出九九乘法表
public class Table99 {
public static void main(String[] args) {
// 外層迴圈控制行數,從1到9
for(int i = 1; i < 10; i++) {
// 內層迴圈控制每行中列印的乘法表項數,從1到當前行數i
for(int j = 1; j <= i; j++) {
// 列印每個乘法表項,格式為 j*i,後面跟一個製表符\t
System.out.print(j + "*" + i + "=" + i * j + "\t");
}
// 每完成一行乘法表的列印後換行
System.out.println();
}
}
}
習題二
//使用氣泡排序對陣列a={6,3,5,4,10,9}進行排序
public class BubblingSorting {
public static void main(String[] args) {
// 初始化陣列
int[] a = {6, 3, 5, 4, 10, 9};
int temp; // 用於交換陣列元素的臨時變數
// 外層迴圈控制排序的輪數,從0到陣列長度減1
for(int i = 0; i < a.length - 1; i++) {
// 內層迴圈控制每輪排序的比較次數,從當前輪的下一個元素開始到陣列末尾
for(int j = i + 1; j < a.length; j++) {
// 如果當前元素大於下一個元素,則交換它們
if(a[i] > a[j]) {
temp = a[i]; // 儲存當前元素
a[i] = a[j]; // 將下一個元素放到當前位置
a[j] = temp; // 將儲存的當前元素放到下一個位置
}
}
}
// 列印排序後的陣列
System.out.print("排序後:" + "\t");
for(int n = 0; n < a.length; n++) {
System.out.print(a[n] + "\t"); // 列印每個元素,後面跟一個製表符
}
}
}
習題三
//對陣列arr={0,1,2,3,4,5,6,7,8,9,10}實現二分查詢(注意:二分查詢的前提是陣列有序,所以若是要查詢的陣列無序,就要先對其排序)
import java.util.Scanner;
public class BinarySearch {
public static void main(String[] args) {
// 建立Scanner物件用於讀取使用者輸入
Scanner sc = new Scanner(System.in);
// 定義並初始化一個有序陣列
int[] arr = {0, 1,2,3,4,5,6,7,8,9,10};
// 初始化查詢範圍的起始和結束索引
int front = 0, end = arr.length - 1, mid = (front + end) / 2;
// 標記是否找到結果
boolean result = false;
// 提示使用者輸入要查詢的數
System.out.println("請輸入你要查詢的數:");
int num = sc.nextInt(); // 讀取使用者輸入的數
// 進行二分查詢迴圈
for(front = 0; front <= end;) {
// 計算中間索引
mid = (front + end) / 2;
// 比較中間值和目標值
if(num < arr[mid]) {
end = mid - 1; // 調整查詢範圍的結束索引
// 更新中間索引
// 重新計算中間索引
mid = (front + end) / 2;
} else if(num > arr[mid]) {
front = mid + 1; // 調整查詢範圍的起始索引
// 更新中間索引
mid = (front + end) / 2;
} else if(num == arr[mid]) {
result = true; // 標記找到結果
break; // 退出迴圈
}
}
// 輸出查詢結果
if(result) {
System.out.println("查詢成功,該數的索引值為:" + mid);
} else {
System.out.println("查詢失敗,沒有該數");
}
}
}
習題四
//對陣列arr = {10, 20, 3, 11, 5, 6, 15}進行選擇排序
public class SelectionSort {
public static void main(String[] args) {
// 初始化陣列
int[] arr = {10, 20, 3, 11, 5, 6, 15};
int n = arr.length; // 獲取陣列的長度
// 外層迴圈控制排序的輪數,從0到陣列長度減1
for (int i = 0; i < n - 1; i++) {
int min_idx = i; // 初始化每輪的最小元素索引為當前輪的起始索引
// 內層迴圈找到本輪中最小元素的索引
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j; // 更新最小元素的索引
}
}
// 交換當前位置的元素和本輪找到的最小元素
int temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
// 列印排序後的陣列
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t"); // 列印每個元素,後面跟一個製表符
}
}
}