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

There are no comments at the moment.