如何正确存储到哈希图,然后复制到树图以循环显示键和值
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++;
}
}
我将用户输入存储到哈希图中,然后使用它从中构建一个树图,然后循环并在其中显示 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 行显示最近的用户输入而不是用户输入的所有数据。
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++;
}
}