Student ID Generator II
Submit solution
Points:
10 (partial)
Time limit:
1.0s
Memory limit:
64M
Authors:
Problem type
Allowed languages
Java 19, Java 8
題目說明
請撰寫一個 Java 程式,實現一個智慧型學生證號碼產生器。該程式會要求使用者持續輸入字串片段,直到集滿四個合法的數字片段為止,最後將這四個片段組合成一個學生證號碼並印出。
程式的運作規則
動態過濾輸入
- 使用者會輸入多個字串片段(數量不固定,由空格或換行分隔)
- 程式必須即時檢查每個片段
合法片段定義
- 若字串片段可成功轉換為
0~9999的整數(負數是不合法的),則視為合法片段 - 將其轉為整數存入
ArrayList<Integer>中 - 若片段不到四個字元,最終組合時會自動補零(例如
68補為0068)
非法片段處理
- 若片段包含非法字元(例如
"123a")導致無法轉換為整數,程式必須默默忽略該片段 - 不存入容器,且不中斷程式,繼續讀取下一個片段
終止條件
- 當
ArrayList<Integer>內成功集滿四個合法整數時,程式應立即停止讀取輸入
輸出結果
- 將這四個整數依據輸入順序,各自格式化為四位數(不足四位左邊補零)並拼接在一起
- 最終印出一行 16 位數的學生證號碼
請利用下方的樣板程式碼為基礎,在標記 // TODO 的空格處填入關鍵程式碼以完成上述功能。
參考程式碼
import java.util.ArrayList;
import java.util.Scanner;
public class DynamicStudentIDGenerator {
public static void main(String[] args) {
// 取得集滿四個合法整數的容器
ArrayList<Integer> validNumbers = getUserInput();
// 組合並印出學生證號碼
String studentID = buildStudentID(validNumbers);
System.out.println(studentID);
}
// 持續讀取使用者輸入,自動忽略非法字串,直到集滿四個合法整數為止
public static ArrayList<Integer> getUserInput() {
Scanner scanner = new Scanner(System.in);
// TODO: 建立一個適當的容器用於儲存整數型態的片段,命名為 validNumbers
// TODO: 使用迴圈控制讀取,直到容器內「集滿四個元素」為止
while (...) {
String input = scanner.next();
// TODO: 嘗試解析字串,若成功則加入容器,若失敗(發生例外)則默默忽略並繼續
}
scanner.close();
return validNumbers;
}
// 將四個整數片段格式化為四位數並拼接
public static String buildStudentID(ArrayList<Integer> numList) {
String studentID = "";
// TODO: 盤點 numList,將每個整數轉換為四位數(不足四位補零)並進行字串拼接
for (...) { // 迴圈內建立 num 變數
studentID += String.format("%04d", num);
}
return studentID;
}
}
輸入說明
- 輸入一行包括多個字串片段,每個字串由空格分開
- 保證至少有四個合法片段
- 片段可能包括:
- 合法整數(0~9999):
123,5,9999,0 - 非法片段:
123a,abc,-5,10000,12.5
- 合法整數(0~9999):
輸出說明
- 輸出該組合完成的字串(無空格、無分隔符號)
- 總長度為 16 位數(四個四位數拼接)
- 註:默默忽略每一個不合法的字串片段
範例測資
輸入1
123 abc 45 xyz 6789 10a 1 end 2
輸出1
0123004567890001
說明
123→ 合法(整數 123),加入abc→ 非法(無法轉換為整數),忽略45→ 合法(整數 45),加入xyz→ 非法(無法轉換為整數),忽略6789→ 合法(整數 6789),加入10a→ 非法(包含字母),忽略1→ 合法(整數 1),加入,集滿四個,停止讀取
組合過程:
- 第1個片段 123 → 格式化為
0123 - 第2個片段 45 → 格式化為
0045 - 第3個片段 6789 → 格式化為
6789 - 第4個片段 1 → 格式化為
0001 - 拼接結果:
0123004567890001(16位數)
輸入2
0 9999 -5 100 12.5 5000 test555 7 2024
輸出2
0000999901005000
說明
0→ 合法(整數 0),加入9999→ 合法(整數 9999,邊界值),加入-5→ 非法(負數),忽略100→ 合法(整數 100),加入12.5→ 非法(浮點數),忽略5000→ 合法(整數 5000),加入,集滿四個,停止讀取
組合過程:
- 第1個片段 0 → 格式化為
0000 - 第2個片段 9999 → 格式化為
9999 - 第3個片段 100 → 格式化為
0100 - 第4個片段 5000 → 格式化為
5000 - 拼接結果:
0000999901005000(16位數)
Comments