iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
自我挑戰組

Java 程式設計與實作:30 天打造個人記帳系統系列 第 9 篇

ArrayList:讓消費紀錄可以自由增加

  • 分享至 

  • xImage
  •  

昨天學習了 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 查看紀錄:
===== 消費紀錄 =====

  1. 早餐:60 元
  2. 捷運:30 元
  3. 午餐:120 元
    目前共有 3 筆紀錄

這次已經不需要像昨天一樣限制最多只能保存 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(),開始發現除了保存資料之外,也可以進一步新增、查看甚至刪除資料。
目前程式碼也開始越來越長,所以接下來如果可以把不同功能分開處理,程式應該會比較容易閱讀和修改。


上一篇
Array 陣列:一次保存多筆消費資料
下一篇
Method 方法:把記帳系統的功能整理乾淨
系列文
Java 程式設計與實作:30 天打造個人記帳系統 共 10 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言