Сравнение ключей HashMap с неработающим входом сканера - PullRequest
0 голосов
/ 07 октября 2018
    import java.util.*;
    import java.util.Map.Entry;
    public class DisjointSet2 {
    private Map<Integer,Node> map1 = new HashMap<>();

    class Node{
        int data;
        Node parent;
        int rank; 
    }



    public void dis_ele() {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter d no of elements: ");
        int n = sc.nextInt();
        for(int i=0;i<n;i++)
            {
                System.out.println("Enter d elements: ");
                int k= sc.nextInt();
                MakeSet(k);
            }
    }

    public void MakeSet(int data){
        Iterator<Map.Entry<Integer, Node>> itr1 = map1.entrySet().iterator();
        while(itr1.hasNext()){
            Map.Entry<Integer, Node> entry = itr1.next();
            /*String itemId = Integer.toString(data);
            if(itemId.contains((CharSequence) entry.getValue())){*/
            if(entry.getKey()==data){
                 System.out.println("Duplicate Found");
                 }
            else {
                Node node = new Node();
                node.data=data;
                node.parent=node;
                // System.out.println("Node of "+data+" is "+node);
                node.rank=0;     
                map1.put(data,node);
                }
            }
        }

    public void union(int data1,int data2){
        Node node1=map1.get(data1);
        Node node2=map1.get(data2); //for getting hash value

        Node parent1 = FindSet(node1);
        Node parent2 = FindSet(node2);

        if(parent1.data==parent2.data)
            return;

        if(parent1.rank==parent2.rank){
            parent1.rank = parent1.rank+1;
            parent2.parent= parent1;
            //System.out.println(parent1.data+ "'s Rank = "+parent1.rank);
            }
        else if(parent1.rank>parent2.rank){
            parent2.parent = parent1;
            }
        else{
            parent1.parent = parent2;
            }   
        }

    public int FindSet(int data){
        return FindSet(map1.get(data)).data;
    }

    private Node FindSet(Node node){
        Node parent =node.parent;
        if(parent==node){
            return parent;
            }
        node.parent=FindSet(node.parent);
        return node.parent;
        }

    public void disp(){
        for (Entry<Integer, Node> entry :map1.entrySet())  
            System.out.println("Key = " + entry.getKey() + 
                    ", Representative Element = " + FindSet(entry.getKey())); 
        }   

    public static void main(String args[]){
        DisjointSet2 ds1 = new DisjointSet2();
        Scanner sc = new Scanner(System.in);
        int ch;
         while(true){
             System.out.println("");
             System.out.println("");
             System.out.println("1. Enter disjoint set elements for makeset operation");
             System.out.println("2. FindSet");
             System.out.println("3. Union");
             System.out.println("4. Display");
             System.out.print("Enter Your Choice : ");
             ch=sc.nextInt();
             switch(ch)
             {
                case 1: 
                    ds1.dis_ele();
                    break;   
                case 2:
                    System.out.println("Enter the element: ");
                    System.out.println("");
                    int el = sc.nextInt();
                    int rep = ds1.FindSet(el);
                    System.out.println(el+"'s representative "+rep);
                    break;
                case 3:
                    System.out.println("Enter the 1st element: ");
                    int el1 = sc.nextInt();
                    System.out.println("Enter the 2nd element: ");
                    int el2 = sc.nextInt();
                    ds1.union(el1, el2);
                    break;
                case 4 :
                    ds1.disp();
                    //case 5:System.exit(0);

             }


         }

    }
}

Здесь внутри функции makeset (), если я сравниваю ключи hashmap с целыми числами, я получаю исключение нулевого указателя.Пожалуйста, измените код, чтобы изменить ошибку.Если я не сравниваю, то программа запустится без проблем.Но я должен сравнить иначе, если я добавлю повторяющиеся элементы, ранг будет сброшен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...