六,陣列筆記及相關練習題大全

bjynjj發表於2024-10-20

Java程式設計基礎:陣列詳解

在Java程式設計中,陣列是一塊連續固定大小的記憶體空間,用於儲存相同型別的多個元素。陣列提供了索引的概念,允許透過索引訪問和運算元組中的元素。本文將詳細探討Java中陣列的定義、初始化、使用和示例。

陣列的定義和初始化

陣列在定義時需要指定資料型別和陣列名。

定義陣列的語句格式

資料型別[] 陣列名; // 推薦
資料型別 陣列名[];

如果只定義陣列而不初始化,相當於一個變數沒有值,不能直接使用。

如何對陣列進行初始化?

  1. 動態初始化:指定陣列大小,陣列中的預設值由Java虛擬機器(JVM)賦值。
  2. 靜態初始化:指定元素值,由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"); // 列印每個元素,後面跟一個製表符
        }
    }
}

相關文章