Counting Values in a Column
Submit solution
Points:
10 (partial)
Time limit:
1.0s
Memory limit:
256M
Authors:
Problem types
Allowed languages
Java 19, Java 8
題目說明
請撰寫一個程式,由使用者輸入五位學生的修課成績,每位學生都有三個欄位,分別是姓名(name)、課程名稱(course)、成績等第(grade),
輸入完畢之後,指定欄位名稱,由程式計算該欄位中每種內容各自出現幾次,最後印出每種內容以及次數,輸出時依照內容字串排序(如範例程式碼所示)。
可以利用以下的參考程式碼作為基礎,做小幅度的修改(可能在12
行以內),讓它可以滿足以上需求。
若修改正確,當程式獲得以下每一組範例輸入時,應該產生該範例的對應輸出結果。
範例輸入#1
jack math a
alice math b
bob english a
alice english c
john math b
name
範例輸出#1
alice: 2
bob: 1
jack: 1
john: 1
範例輸入#2
mary biology a
jack english a
alice biology c
bob biology a
jack math b
course
範例輸出#2
biology: 3
english: 1
math: 1
範例輸入#3
mary biology a
jack english a
alice biology c
bob biology a
jack math b
grade
範例輸出#3
a: 3
b: 1
c: 1
參考程式碼
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class MyProgram {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<HashMap<String, String>> records = DataCollector.getInputData(scanner, 5);
// Get the field name to count values
String field = scanner.next();
scanner.close();
// Create an instance of DataAnalyzer and count values in a specific field
DataAnalyzer analyzer = new DataAnalyzer(records);
HashMap<String, Integer> result = analyzer.countValues(field);
// Sort the result by key and print it
Object[] keys = result.keySet().toArray();
Arrays.sort(keys);
for (Object key : keys) {
System.out.println(key + ": " + result.get(key));
}
}
}
class DataCollector {
// Static method to get input data from the user
public static ArrayList<HashMap<String, String>> getInputData(Scanner scanner, int numberOfRecords) {
ArrayList<HashMap<String, String>> records = new ArrayList<>();
for (int i = 0; i < numberOfRecords; i++) {
HashMap<String, String> record = new HashMap<>();
String name = scanner.next();
String course = scanner.next();
String grade = scanner.next();
record.put("name", name);
record.put("course", course);
record.put("grade", grade);
records.add(record);
}
return records;
}
}
class DataAnalyzer {
private ArrayList<HashMap<String, String>> records;
// Constructor to initialize records
public DataAnalyzer(ArrayList<HashMap<String, String>> records) {
this.records = records;
}
}
Comments