文本文件每行格式:姓名 年齡 鉛筆數,單價 2 元。需讀取、計算每人總價、輸出明細及總計。
public class Student {
private String name;
private int age;
private int pencilCount;
private int totalPrice; // pencilCount * 2
// 構造器、getter/setter、toString 省略
public static Student parse(String line) {
String[] parts = line.trim().split("\\s+");
Student s = new Student();
s.setName(parts[0]);
s.setAge(Integer.parseInt(parts[1]));
s.setPencilCount(Integer.parseInt(parts[2]));
s.setTotalPrice(s.getPencilCount() * 2);
return s;
}
}
public class PencilStatistics {
public static void main(String[] args) {
List list = new ArrayList<>();
try (Scanner scanner = new Scanner(new File("students.txt"), "UTF-8")) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.isBlank()) continue;
list.add(Student.parse(line));
}
} catch (IOException e) {
e.printStackTrace();
}
int grandTotal = 0;
for (Student s : list) {
System.out.println(s); // 依賴 toString()
grandTotal += s.getTotalPrice();
}
System.out.println("總價:" + grandTotal + "元");
}
}
try-with-resources 自動關閉流,防洩漏。split("\\s+") 兼容多空格/制表符分隔。parse 靜態方法,職責清晰。toString() 統一控制,易維護。Files.lines() 流式處理。