HashMap получает введенные отсортированные значения + печатает наибольшее значение как String и Integer - PullRequest
0 голосов
/ 09 марта 2020

Я пишу программу, в которой предлагается ввести количество учеников, имя ученика и его оценки. Затем программа должна отсортировать значения и вывести лучшего ученика в классе (с оценкой выше 4, скажем, 5). Я не могу вывести имя студента. Программа выводит счет, она также сортирует значения, но не печатает значение типа String.

HashMap <String,Integer> student = new HashMap <String,Integer> (); 
        System.out.println("Enter a number of students: ");
        int numberOfStudents = sc.nextInt();

        String a ="";

        Integer b = 0;

          for(int i=0; i<numberOfStudents; i++){
            System.out.println("Enter a student's name");
              a=sc.next();
                  System.out.println("Enter the student's score");
                     b=sc.nextInt();
                          student.put(a, b);

 }
   student.entrySet()
  .stream()
  .sorted(HashMap.Entry.<String, Integer>comparingByKey())
  .forEach(System.out::println);
        if(b>4)
    System.out.println("The best student is "+student.get(a));/*Here "a" is a string,isn't it? Firstly ,
I tried to get the values of both String and Integer by writing student.get(a,b); But the program
throws Exceptions saying "no suitable method found for get(String , Integer)".*/

Вот вывод:

Enter a number of students: 
2
Enter a student's name
N
Enter the student's score
4
Enter a student's name
d
Enter the student's score
5
N=4
d=5
The best student is 5

Почему программа отображает " a "(String) как целое число, а при переключении a на b (Integer) отображается нулевое значение? И как мне наконец-то отобразить имя лучшего ученика и его оценку?

1 Ответ

1 голос
/ 09 марта 2020

В HashMap первое значение является ключом, а второе значение связано с ключом.

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

Здесь строка является ключом, что означает, что HashMap сортируется в соответствии с String а не Integer как хотелось бы. Попробуйте использовать следующее:

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

student.get(a) дает вам значение, соответствующее ключу a, поэтому вы получили Integer вывод в вашем случае.

Попробуйте использовать getKey() и getValue() для получения ключа и значения.

String key = entry.getKey();


String value = entry.getValue();
...