本文透過四個實作範例,深入解析 Java 陣列的核心觀念:值傳遞與參考傳遞差異、二維陣列模擬棋盤、整數轉中文讀法、大數加減法實作。
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 只有值傳遞;傳遞陣列時,傳的是「參考的值」,因此可修改陣列元素,但無法改變參考本身指向新陣列。
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 讀取控制台輸入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 → 輸出 一千一百二十三
此演算法為直觀實作,未處理「一十」→「十」、「零」合併等語言習慣,進階版可加入規則修正。
設計概念:每個陣列元素儲存一位數字(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 範圍的超大整數運算。
