значения, введенные пользователем, не добавляются в hashmap

#java #sorting #hashmap

Вопрос:

У меня есть хэш-карта, в которой предварительно введены значения, и я беру больше значений от пользователя. Затем эти значения сортируются в порядке возрастания. Но в этом коде введенные пользователем значения не вставляются в хэш-карту.

 import java.sql.SQLOutput;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;


public class CFG {

    public static void main(String[] args) {
     

        sortByValueJava8Stream();
    }

    private static void sortByValueJava8Stream()
    {
        Map<String, Integer> unSortedMap = getUnSortedMap();
        LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>();
        unSortedMap.entrySet().stream().sorted(Map.Entry.comparingByValue())
                .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));

        System.out.println("Sorted Map   : "   sortedMap);


    }

    public static Map<String, Integer> getUnSortedMap() {

        Scanner in = new Scanner(System.in);
        HashMap<String, Integer> unsortMap = new HashMap<>();
        unsortMap.put("Shiran", 342);
        unsortMap.put("Hashini", 448);
        unsortMap.put("Chanchala", 398);
        unsortMap.put("Priyankara", 399);
        unsortMap.put("Mayuri", 350);
        unsortMap.put("Sameera", 321);
        unsortMap.put("Supun", 299);
        unsortMap.put("Supuni", 378);
        unsortMap.put("Kavindu", 384);
        unsortMap.put("Nadeeka", 440);

        System.out.println("Do you want to add more players? ");
        System.out.println("if yes pres 1 : ");
        Integer c = in.nextInt();
        if (c == 1) {
            addUser();

        } return unsortMap;
    }


    public static void addUser(){

        Scanner in = new Scanner(System.in);
        Map<String, Integer> unsortMap = new HashMap<>();
        System.out.println("Enter name : ");
        String a = in.nextLine();
        in.nextLine();
        System.out.println("Enter Time : ");
        Integer b =in.nextInt();
        unsortMap.put(a,b);

    }

}
 
 
 

Я создал метод под названием adduser() и вызвал его, чтобы добавить новые значения. но данные им не вводятся. Как я могу это исправить ?

Комментарии:

1. Карта unsortMap в вашей addUser() -это не та же карта, unsortMap что и в вашей getUnSortedMap() . Вы создаете новую карту локальной области метода, которая не имеет ничего общего с другой картой.

2. Добавить пользователя-это просто создание новой карты, значение которой теряется после завершения функции.

Ответ №1:

Один из способов сделать это-глобально объявить несортированную карту, чтобы ее можно было использовать в других методах. Проблема в вашем addUser методе, поскольку он создает локальный unsortMap , который никогда не используется после завершения функции. Другой способ-передать несортированную карту в качестве параметра addUser методу и поместить требуемую пару.

Ниже приведен измененный рабочий код.

 class CFG
{
    static Map<String, Integer> unsortMap; // global declaration of Map
    public static void main(String[] args)
    {
        sortByValueJava8Stream();
    }
    private static void sortByValueJava8Stream()
    {
        Map<String, Integer>unSortedMap = getUnSortedMap();
        LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>();
        unSortedMap.entrySet().stream().sorted(Map.Entry.comparingByValue())
                .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));

        System.out.println("Sorted Map   : "   sortedMap);
    }

    public static Map<String, Integer> getUnSortedMap()
    {
        Scanner in = new Scanner(System.in);
        unsortMap = new HashMap<>(); // Initializing the Map
        unsortMap.put("Shiran", 342);unsortMap.put("Hashini", 448);
        unsortMap.put("Chanchala", 398);unsortMap.put("Priyankara", 399);
        unsortMap.put("Mayuri", 350);unsortMap.put("Sameera", 321);
        unsortMap.put("Supun", 299);unsortMap.put("Supuni", 378);
        unsortMap.put("Kavindu", 384);unsortMap.put("Nadeeka", 440);

        System.out.println("Do you want to add more players? ");
        System.out.println("if yes pres 1 : ");
        Integer c = in.nextInt();
        if (c == 1)
            addUser();
        return unsortMap;
    }
    public static void addUser()
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter name : ");
        String a = in.nextLine();
        System.out.println("Enter Time : ");
        int b = in.nextInt();
        unsortMap.put(a,b);
    }
}
 

Ответ №2:

Вы должны передать несортированную карту в метод addUser.

 public static Map<String, Integer> getUnSortedMap() {

    Scanner in = new Scanner(System.in);
    HashMap<String, Integer> unsortMap = new HashMap<>();
    unsortMap.put("Shiran", 342);
    unsortMap.put("Hashini", 448);
    unsortMap.put("Chanchala", 398);
    unsortMap.put("Priyankara", 399);
    unsortMap.put("Mayuri", 350);
    unsortMap.put("Sameera", 321);
    unsortMap.put("Supun", 299);
    unsortMap.put("Supuni", 378);
    unsortMap.put("Kavindu", 384);
    unsortMap.put("Nadeeka", 440);

    System.out.println("Do you want to add more players? ");
    System.out.println("if yes pres 1 : ");
    Integer c = in.nextInt();
    if (c == 1) {
        addUser(unsortMap);

    } return unsortMap;
}


public static void addUser(Map<String, Integer> unsortMap){

    Scanner in = new Scanner(System.in);
    System.out.println("Enter name : ");
    String a = in.nextLine();
    in.nextLine();
    System.out.println("Enter Time : ");
    Integer b =in.nextInt();
    unsortMap.put(a,b);

}