如何正确存储到哈希图,然后复制到树图以循环显示键和值

How to properly store to a hashmap and then copy over to a treemap to loop and display the key and values

我将用户输入存储到哈希图中,然后使用它从中构建一个树图,然后循环并在其中显示 key/values。相反,我只设法 store/display 输入的 2 个最新用户数据。

import java.util.Scanner;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.Map;

public class Lab09 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        int studentNbr = 0;
        int scoreNbr = 0;
        String name = "";

        HashMap<String, Integer> students = new HashMap<String, Integer>();


        System.out.println("How many students do you want to enter?");
        studentNbr = input.nextInt();
        input.nextLine();

        System.out.println("How many scores do you want to enter for each student?");
        scoreNbr = input.nextInt();
        input.nextLine();

        for(int i = 0; i < studentNbr; i++){
            System.out.println("Enter student number " + (i+1) + " name:");
            name = input.nextLine();
            int j = 0;
            while(j < scoreNbr){
                System.out.println("Enter score " + (j+1) + " for " + name + ":");
                students.put(name, input.nextInt());
                input.nextLine();
                j++;
            }

        }
        Map<String, Integer> sorted = new TreeMap<String, Integer>(students);
        for (String i : sorted.keySet()) {
            System.out.println("key: " + i + " value: " + sorted.get(i));
        }

    }
}

我希望能够显示所有 key/values 但只收到 2 行显示最近的用户输入而不是用户输入的所有数据。

如果 'key' 相同,java 中的

HashMap 将用新的 'value' 替换以前的 'value'。您可以使用学生姓名和分数 ID 为 'students' 映射创建复合键。例如

  students.put(name+'-'+j, input.nextInt());

您也可以使用分数列表作为值。并且你可以直接在第一个地方使用 TreeMap 而不必定义两个地图实例。 这里是(相关)代码:

    Map<String, List<Integer>> students = new TreeMap<>();        

    for(int i = 0; i < studentNbr; i++){
        System.out.println("Enter student number " + (i+1) + " name:");
        name = input.nextLine();
        int j = 0;
        while(j < scoreNbr){
            System.out.println("Enter score " + (j+1) + " for " + name + ":");
            students.putIfAbsent(name, new ArrayList<>());
            students.get(name).add(input.nextInt());
            input.nextLine();
            j++;
        }
    }