昨天使用 while 迴圈做出了可以重複操作的記帳系統選單。
不過昨天還有一個問題:雖然可以新增消費,但輸入完之後,資料沒有真正保存下來,所以「查看紀錄」功能還不能使用。今天要學習 Java 的 Array(陣列),讓程式可以一次保存多筆消費資料。
什麼是 Array?
之前使用一般變數時,一個變數通常只能存一個資料。
例如:
String item = "早餐";
如果今天有很多筆消費,就需要很多變數:
String item1 = "早餐";
String item2 = "午餐";
String item3 = "晚餐";
這樣資料一多就會變得很麻煩。
Array 可以讓我們使用一個變數名稱,保存很多筆相同類型的資料。
例如:
String[] items = {"早餐", "午餐", "晚餐"};
這個 items 陣列裡就保存了三筆資料。
Array 的位置從 0 開始
Java 陣列有一個需要注意的地方,就是第一個位置不是 1,而是從 0 開始。
例如:
String[] items = {"早餐", "午餐", "晚餐"};
它們的位置分別是:
items[0] → 早餐
items[1] → 午餐
items[2] → 晚餐
如果想取得第一筆資料,可以寫:
System.out.println(items[0]);
執行結果:
早餐
這也是昨天學習 for 迴圈時,為什麼常常會看到 i = 0。
建立記帳系統需要的陣列
今天先建立兩個陣列:
String[] items = new String[10];
int[] amounts = new int[10];
items 用來保存消費項目,amounts 用來保存消費金額。
new String[10] 代表目前最多可以保存 10 筆資料。
另外再建立:
int count = 0;
用來記錄目前已經存了幾筆消費。
新增第一筆資料
假設使用者輸入:
早餐
60
可以把資料放進:
items[count] = "早餐";
amounts[count] = 60;
一開始:
count = 0
所以實際上就是:
items[0] = "早餐";
amounts[0] = 60;
存完之後:
count++;
count 就會變成 1,下一筆資料就會存進 items[1] 和 amounts[1]。
今天的小實作:保存多筆消費資料
今天把昨天的記帳系統繼續改進:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] items = new String[10];
int[] amounts = new int[10];
int count = 0;
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:
if (count < 10) {
System.out.print("請輸入消費項目:");
items[count] = scanner.nextLine();
System.out.print("請輸入消費金額:");
amounts[count] = scanner.nextInt();
scanner.nextLine();
count++;
System.out.println("記帳成功!");
} else {
System.out.println("紀錄已滿!");
}
break;
case 2:
System.out.println();
System.out.println("===== 消費紀錄 =====");
if (count == 0) {
System.out.println("目前沒有消費紀錄。");
} else {
for (int i = 0; i < count; i++) {
System.out.println(
(i + 1) + ". "
+ items[i] + ":"
+ amounts[i] + " 元"
);
}
}
break;
case 3:
running = false;
System.out.println("已離開個人記帳系統!");
break;
default:
System.out.println("輸入錯誤,請重新選擇!");
}
}
scanner.close();
}
}
實際執行看看
第一次選擇:
請選擇功能:1
請輸入消費項目:早餐
請輸入消費金額:60
記帳成功!
再新增一筆:
請選擇功能:1
請輸入消費項目:捷運
請輸入消費金額:30
記帳成功!
再新增:
請選擇功能:1
請輸入消費項目:午餐
請輸入消費金額:120
記帳成功!
接著選擇:
請選擇功能:2
就可以看到:
===== 消費紀錄 =====
Array 目前還有一個問題
今天建立的是:
String[] items = new String[10];
所以一開始就決定最多只能保存 10 筆資料。
如果未來想記第 11 筆,就沒有位置可以放了。
這也是 Array 比較不方便的地方之一。
如果可以有一種方式,讓資料數量增加時,儲存空間也可以跟著增加,就會更適合真正的記帳系統。
這就是之後會學到的 ArrayList。
Day 8 學習心得
今天學習了 Java 的 Array,並把它實際加入記帳系統中。最大的進步是程式終於可以同時保存多筆消費資料,而且使用者選擇「查看紀錄」時,也可以看到之前新增的內容。
一開始對陣列從 0 開始這件事有點容易搞混,不過搭配 count 和 for 迴圈之後,就比較能理解每一筆資料是怎麼被保存和讀取的。
目前 Array 還是有固定大小的限制,所以接下來想再學習更方便的資料儲存方式,讓記帳系統可以更彈性地管理消費紀錄。