Book Inventory Statistics II
Submit solution
Points:
10 (partial)
Time limit:
1.0s
Memory limit:
64M
Authors:
Problem type
Allowed languages
Java 19, Java 8
題目說明
請撰寫一個 Java 程式,實現一個圖書欄位分析系統。程式將讀取五本書籍的欄位資料,並能根據指定的欄位名稱,計算該欄位中共有幾種不同的內容(相異值的數量)。
程式的運作規則如下:
書籍資料輸入:前 5 行每行輸入一本書的資料,由「書名 (title)」、「作者 (author)」、「類型 (genre)」三個字串組成,以空格分隔。程式會自動將其封裝為 HashMap<String, String> 並存入 ArrayList 中。
分析欄位輸入:第 6 行輸入一個指定的欄位名稱,其值必定為 title、author 或 genre 三者之一。
相異值計算機制:BookAnalyzer 類別必須盤點所有書籍紀錄,擷取每本書在該指定欄位下的字串內容。利用適當的集合容器進行去重,最終計算出該欄位中「共有幾種不同的項目」。
輸出結果:輸出一行整數數字,代表該指定欄位中相異內容的總種數。
請利用下方的樣板程式碼為基礎,在標記 // TODO 的空格處填入關鍵程式碼以完成上述功能。
參考程式碼
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
public class LibrarySystem {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<HashMap<String, String>> books = BookCollector.getInputData(scanner, 5);
// 取得要統計相異值數量的欄位名稱
String category = scanner.next();
scanner.close();
// 建立 BookAnalyzer 實體並計算該欄位的相異內容種數
BookAnalyzer analyzer = new BookAnalyzer(books);
int distinctCount = analyzer.countDistinctValues(category);
// 印出最終種類數量
System.out.println(distinctCount);
}
}
class BookCollector {
public static ArrayList<HashMap<String, String>> getInputData(Scanner scanner, int numberOfBooks) {
ArrayList<HashMap<String, String>> books = new ArrayList<>();
for (int i = 0; i < numberOfBooks; i++) {
HashMap<String, String> book = new HashMap<>();
String title = scanner.next();
String author = scanner.next();
String genre = scanner.next();
book.put("title", title);
book.put("author", author);
book.put("genre", genre);
books.add(book);
}
return books;
}
}
class BookAnalyzer {
private ArrayList<HashMap<String, String>> books;
// 建構子初始化資料
public BookAnalyzer(ArrayList<HashMap<String, String>> books) {
this.books = books;
}
// 計算指定欄位中共有幾種不同的內容
public int countDistinctValues(String categoryName) {
// TODO: 宣告一個適當的唯一的集合容器,用於自動去除重複的字串內容
// TODO: 盤點 books 容器,將每本書在指定欄位(categoryName)的值取出並存入集合中
// TODO: 傳回該集合中元素的總數量
return 0;
}
}輸入值的格式
輸入共 6 行,格式如下:
- 前 5 行:每行輸入一本書的資料,由「書名」、「作者」、「類型」三個字串組成,以空格分隔。
- 第 6 行:輸入要統計的欄位名稱,其值為 title、author 或 genre 三者之一。
輸出值的格式
輸出一行整數數字,代表該指定欄位中相異內容的總種數。
sample input1
gatsby fitzgerald fiction
hamlet shakespeare drama
pride austen fiction
othello shakespeare drama
emma austen fiction
authorsample output1
3說明:指定的欄位是 author。五本書的作者分別為 fitzgerald, shakespeare, austen, shakespeare, austen。其中不重複的作者共有三種(fitzgerald, shakespeare, austen),故輸出 3。
sample input2
sherlock doyle mystery
poirot christie mystery
holmes doyle mystery
marple christie mystery
spade hammett noir
genresample output2
2說明:指定的欄位是 genre。五本書的類型分別為 mystery, mystery, mystery, mystery, noir。其中不重複的類型共有兩種(mystery, noir),故輸出 2。
Comments