昨天學習了 Java 的 Array 陣列,讓記帳系統第一次可以保存多筆消費資料。
不過昨天也發現一個問題,我們建立陣列時必須先決定可以放多少筆資料:
String[] items = new String[10];
這代表最多只能存 10 筆。如果之後想增加更多消費紀錄,就會受到限制。
所以今天要學習一個更方便的工具:ArrayList。
什麼是 ArrayList?
ArrayList 和昨天學到的 Array 很像,都可以用來保存多筆資料。
最大的不同是:
Array 的大小通常建立之後就固定了,而 ArrayList 可以隨著資料增加或減少。
例如昨天:
String[] items = new String[10];
今天可以改成:
ArrayList items = new ArrayList<>();
使用 ArrayList 前,要先在程式最上方加入:
import java.util.ArrayList;
如何加入資料?
ArrayList 可以使用 .add() 加入新的資料。
例如:
ArrayList items = new ArrayList<>();
items.add("早餐");
items.add("捷運");
items.add("午餐");
現在 items 裡面就有三筆資料:
早餐
捷運
午餐
而且不用一開始就決定只能放幾筆。
如何取得資料?
可以使用 .get() 取得指定位置的資料。
例如:
System.out.println(items.get(0));
結果:
早餐
和 Array 一樣,ArrayList 的位置也是從 0 開始。
所以:
items.get(0) → 早餐
items.get(1) → 捷運
items.get(2) → 午餐
size():目前有幾筆資料?
ArrayList 還可以使用:items.size()
取得目前的資料數量。
例如:
System.out.println("目前共有 " + items.size() + " 筆紀錄");
如果裡面有三筆資料,就會顯示:
目前共有 3 筆紀錄
今天的小實作:把 Array 改成 ArrayList
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<String> items = new ArrayList<>();
ArrayList<Integer> amounts = new ArrayList<>();
boolean running = true;
while (running) {
System.out.println();
System.out.println("===== 個人記帳系統 =====");
System.out.println("1. 新增消費");
System.out.println("2. 查看紀錄");
System.out.println("3. 離開");
System.out.print("請選擇功能:");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
System.out.print("請輸入消費項目:");
String item = scanner.nextLine();
System.out.print("請輸入消費金額:");
int amount = scanner.nextInt();
scanner.nextLine();
items.add(item);
amounts.add(amount);
System.out.println("記帳成功!");
break;
case 2:
System.out.println();
System.out.println("===== 消費紀錄 =====");
if (items.size() == 0) {
System.out.println("目前沒有消費紀錄。");
} else {
for (int i = 0; i < items.size(); i++) {
System.out.println(
(i + 1) + ". "
+ items.get(i) + ":"
+ amounts.get(i) + " 元"
);
}
System.out.println(
"目前共有 " + items.size() + " 筆紀錄"
);
}
break;
case 3:
running = false;
System.out.println("已離開個人記帳系統!");
break;
default:
System.out.println("輸入錯誤,請重新選擇!");
}
}
scanner.close();
}
}
執行結果
先新增第一筆:
請選擇功能:1
請輸入消費項目:早餐
請輸入消費金額:60
記帳成功!
再新增:
請選擇功能:1
請輸入消費項目:捷運
請輸入消費金額:30
記帳成功!
再新增一筆:
請選擇功能:1
請輸入消費項目:午餐
請輸入消費金額:120
記帳成功!
接著選擇 2 查看紀錄:
===== 消費紀錄 =====
這次已經不需要像昨天一樣限制最多只能保存 10 筆。
Array 和 ArrayList 的差別
經過昨天和今天的實作,我對兩者的差別比較清楚了。
Array:String[] items = new String[10];建立的時候就先決定大小。
ArrayList:ArrayList items = new ArrayList<>();
可以使用:
items.add("早餐");繼續增加資料
另外 Array 取得資料時使用:items[0]
ArrayList 則是:items.get(0)
ArrayList 對目前的記帳系統來說比較方便,因為實際記帳時,我們不會事先知道到底會有幾筆消費紀錄。
再試一個新功能:remove()
既然 ArrayList 可以新增資料,也可以刪除資料。
例如:
items.remove(0);
amounts.remove(0);
就可以刪除第一筆資料。
這個功能之後可以拿來製作記帳系統的「刪除紀錄」功能。
不過目前先把資料的新增和查看處理好,之後再正式把刪除功能加入選單。
Day 9 學習心得
今天學習了 ArrayList,也把昨天使用 Array 儲存資料的方式改成 ArrayList。
我覺得 ArrayList 用在記帳系統裡方便很多,因為不用一開始就決定可以保存幾筆資料,只要有新的消費就可以使用 add() 加進去。
今天也認識了 get()、size() 和 remove(),開始發現除了保存資料之外,也可以進一步新增、查看甚至刪除資料。
目前程式碼也開始越來越長,所以接下來如果可以把不同功能分開處理,程式應該會比較容易閱讀和修改。