首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 陣列實戰教學:參數傳遞、二維陣列與大數運算

     編輯:Java 綜合教學

Java 陣列實戰教學:參數傳遞、二維陣列與大數運算

本文透過四個實作範例,深入解析 Java 陣列的核心觀念:值傳遞與參考傳遞差異、二維陣列模擬棋盤、整數轉中文讀法、大數加減法實作。

範例一:PassArray — 陣列參數傳遞機制

public class PassArray {
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4, 5};
        String output = "原始陣列值:\n";
        for (int v : a) output += " " + v;

        output += "\n\n呼叫 modifyElement(a[3]) 前 a[3]=" + a[3];
        modifyElement(a[3]);          // 傳遞單一元素(值傳遞)
        output += "\n呼叫 modifyElement(a[3]) 後 a[3]=" + a[3];

        output += "\n\n呼叫 modifyArray(a) 前:";
        for (int v : a) output += " " + v;
        modifyArray(a);               // 傳遞整個陣列(參考傳遞)
        output += "\n呼叫 modifyArray(a) 後:";
        for (int v : a) output += " " + v;

        System.out.println(output);
    }

    // 修改陣列元素(參考傳遞,會影響原陣列)
    public static void modifyArray(int[] b) {
        for (int i = 0; i < b.length; i++) b[i] *= 2;
    }

    // 修改單一 int 值(值傳遞,不影響原陣列)
    public static void modifyElement(int e) {
        e *= 2;
    }
}

執行結果分析

  • modifyElement:傳入 a[3] 的值拷貝,方法內修改不影響原陣列。
  • modifyArray:傳入陣列參考,方法內修改元素會直接改變原陣列內容。

結論:Java 只有值傳遞;傳遞陣列時,傳的是「參考的值」,因此可修改陣列元素,但無法改變參考本身指向新陣列。

範例二:QiPan — 二維陣列模擬五子棋棋盤

public class QiPan {
    private static final int BOARD_SIZE = 15;
    private String[][] board;

    public void initBoard() {
        board = new String[BOARD_SIZE][BOARD_SIZE];
        for (int i = 0; i < BOARD_SIZE; i++)
            for (int j = 0; j < BOARD_SIZE; j++)
                board[i][j] = "╋";
    }

    public void printBoard() {
        for (String[] row : board) {
            for (String cell : row) System.out.print(cell);
            System.out.println();
        }
    }

    public static void main(String[] args) throws Exception {
        QiPan game = new QiPan();
        game.initBoard();
        game.printBoard();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("請輸入座標 (x,y):");
        String input;
        while ((input = br.readLine()) != null) {
            String[] pos = input.split(",");
            int x = Integer.parseInt(pos[0]) - 1;
            int y = Integer.parseInt(pos[1]) - 1;
            if (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE) {
                board[x][y] = "●"; // 玩家落子
            }
            game.printBoard();
            System.out.println("請輸入座標 (x,y):");
        }
    }
}

重點

  • 二維陣列 String[15][15] 代表棋盤
  • 使用 BufferedReader 讀取控制台輸入
  • 座標轉換:使用者輸入 1-based,陣列為 0-based

範例三:IntToChinese — 整數轉中文讀法(五位數以內)

public class IntToChinese {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("請輸入 99999 以內整數:");
        int num = in.nextInt();
        System.out.println(ToChinese(num));
    }

    public static String ToChinese(int num) {
        String[] chNum = {"零","一","二","三","四","五","六","七","八","九"};
        String[] chUnit = {"","十","百","千","萬"};
        StringBuilder sb = new StringBuilder();
        String s = String.valueOf(num);
        for (int i = 0; i < s.length(); i++) {
            int digit = s.charAt(i) - '0';
            sb.append(chNum[digit]).append(chUnit[s.length() - i - 1]);
        }
        return sb.toString();
    }
}

輸出範例

輸入 1123 → 輸出 一千一百二十三

注意

此演算法為直觀實作,未處理「一十」→「十」、「零」合併等語言習慣,進階版可加入規則修正。

範例四:BigNumber — 陣列實作大數加減法

設計概念:每個陣列元素儲存一位數字(0-9),從最低位(陣列尾端)開始運算,進位/借位傳遞至前一位。

// 概念程式碼片段
int[] a = {9,9,9}; // 代表 999
int[] b = {1};     // 代表 1
// 加法:從右向左,sum = a[i]+b[i]+carry; result[i] = sum%10; carry = sum/10;
// 減法:從右向左,diff = a[i]-b[i]-borrow; 若 diff<0 則 diff+=10, borrow=1;

完整程式碼與執行截圖請參考原文附件。核心邏輯在於模擬手算直式加減法,適用於超出 long 範圍的超大整數運算。

總結

  • 陣列參數傳遞:傳參考值,可修改元素不可換參考
  • 二維陣列適合表格、棋盤、矩陣等結構化資料
  • 字串操作可輕鬆實作數字轉中文、大數運算等演算法

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved