Saya mencoba menggunakan HashMap untuk menyimpan pasangan nilai kunci, di mana kuncinya adalah String Alfanumerik dan nilainya adalah tumpukan kelas lain yang disebut Akun. Saya menulis kode untuk metode add sekarang, dan saya mengalami masalah. Untuk beberapa alasan kode hanya berhenti ketika mengevaluasi apakah kunci sudah ada di HashMap atau tidak.

Apa yang harus dilakukan metode ini adalah melempar pengecualian jika VIN tidak cocok dengan VIN akun objek, jika bukan itu masalahnya, ia harus memeriksa apakah VIN sudah ada di HashMap, jika ya, harus menambahkan objek akun ke tumpukan yang terkait dengan VIN, jika tidak ada harus membuat tumpukan, menambahkan nilai ke tumpukan dan menambahkan pasangan tumpukan kunci ke HashMap

Inilah yang saya coba sejauh ini:

//importing HashMap
import java.util.HashMap;  
{ 
//Creating HashMap
private HashMap<String, Stack<Account>> records;   

//add method
public void add(String VIN, Account value) throws Exception
    { 

        if(!VIN.equals(value.getVIN())) 
        {  
            System.out.println("Something went wrong :/");
            throw new Exception("VIN does not match account");  
        }  
        else if(records.containsKey(VIN)) 
        { 
            System.out.println("VIN exists, adding to record");
            records.get("VIN").add(value); 
            System.out.println("Success!");
        } 
        else 
        {  
            System.out.println("New account made, record added!");
            Stack<Account> stack = new Stack<Account>(); 
            stack.add(value);
            records.put(VIN, stack); 
            System.out.println("Success!");
        }
    } 
   //Driver 
   public static void main(String[] args) 
    { 
        CVR hello= new CVR(); 
        try 
        {  
            Account abdcg=new Account("adsj4jandnj4", "abdcg", "perfect record");  
            Account abdcg1=new Account("adsj4jandnj4","abdcg1", "Fender Bender");
            /////
            hello.add("adsj4jandnj4", abdcg); 
            hello.add("adsj4jandnj4", abdcg1);
        } 
        catch (Exception e) 
        {
            // TODO Auto-generated catch block
            e.getMessage();
        }
    }
} 

Harap dicatat saya sangat baru dalam hal ini, saya baru saja belajar tentang HashMaps dan ini adalah pertama kalinya saya menggunakannya, bantuan apa pun akan dihargai!

**edit: Berikut adalah kode CVR lengkap seperti yang diminta:

import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;  
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Stack; 
import java.util.Random; 
import java.util.*;

public class CVR 
{
    //this will be used to generate random alpha numeric numbers
    private final static String alphaNumeric="ABDCEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 
    //key
    private String VIN; 

    //threshold (determines which ADT to use)
    private int threshold; 

    //length of key
    private int VINLength; 

    //this is an object of Archive which will hold the data associated with VIN
    private Account value; 

    //TBD
    //private Collection<Account> activeVINS;

    //HashMap to store all the key-value pairs 
    //the value come in the form of a stack because, 
    //multiple events can be associated with the same  
    //VIN, and must be shown in reverse-chronological order
    private HashMap<String, Stack<Account>> records; 

    //This will keep track of all VINs and make sure  
    //none of them are repeated
    private HashSet<String> VINRecorder;

    //default constructor
    public CVR() {}

    //parameterized constructor for CVR, takes VIN 
    //and adds it to VINRecorder
    public CVR (String VIN) 
    {
        this.VIN=VIN; 
        records=new HashMap<>(); 
        VINRecorder.add(VIN);
    } 

    //accessors and mutators 
    //VIN getters and setters
    public String getVIN() 
    { 
        return VIN;
    } 
    public void setVIN(String VIN) 
    { 
        this.VIN=VIN; 
        VINRecorder=new HashSet<>(); 
        VINRecorder.add(VIN);
    } 
    //threshold getters and setters 
    public int getThreshold() 
    { 
        return threshold;
    } 
        //for this one we have to keep in mind the restriction set 
        //on us in the instructions
    public void setThreshold(int threshold) throws Exception
    { 
        if(threshold<100 || threshold>900000) 
        { 
            //System.out.println("Invalid input for threshold"); 
            throw new Exception("Invalid input for threshold");
        } 
        else 
        { 
            this.threshold=threshold;
        }
    } 
    //VINLength getters and setters 
    public int getVINLength() 
    { 
        return VINLength;
    } 
        //again for this one. we need to take the 
        //instructions into account for this special 
        //case 
    public void setVINLength(int VINLength) throws Exception 
    { 
        if(VINLength<10 || VINLength>17) 
        { 
            throw new Exception("Invalid input for VIN length");    
        } 
        else 
        { 
            this.VINLength=VINLength;
        }
    } 


    //Now onto the methods 
    //Generate method 
    //This method should randomly generate a sequence 
    //containing n new non-existing valid keys 
    //***Must determine whether the output is a sequence or not
    public String generate(int size) throws Exception 
    { 

        char[] Arr= alphaNumeric.toCharArray(); 
        String[] ender=new String[size];


        //generating random number between 10 and 17 
        Random r= new Random(); 
        int low=10; 
        int high=17; 
        for(int x=0; x<size;x++) 
        {  
            int highLow=r.nextInt(high-low)+10;
            StringBuilder newString=new StringBuilder();
            //making string between length of 10 and 17 randomly
            for(int i=0; i<highLow; i++) 
            { 
                newString.append(Arr[new Random().nextInt(Arr.length)]); 
            } 
            /////////////////// 
            String newVIN=newString.toString(); 
            //System.out.println(newVIN);  


            //This must be further explored, I do not know why, 
            //but for some reason it does not work if the first 
            //condition is not there, to be explored
            if(newVIN!=null) 
            { 
            } 

            //stops here for some reason, must find out why, something is wrong with this statement
            else if(VINRecorder.contains(newVIN)) 
            {  
                x--;
            }  
            else 
            { 
                ender[x]=newString.toString(); 
            }   

            ender[x]=newString.toString();

        }   
        //System.out.println("hello");
        System.out.println(Arrays.toString(ender));
        return Arrays.toString(ender);
    }

    //method allKeys 
    //this method should return all keys as a sorted 
    //sequence in lexicographic order 
    //the plan here is to use
    /**
    public LinkedList<Account> allKeys()
    {

    } 
    **/

    //add method 
    //****must check to see if must be resized later
    public void add(String VIN, Account value) throws Exception
    { 

        if(!VIN.equals(value.getVIN())) 
        {  
            System.out.println("Something went wrong :/");
            throw new Exception("VIN does not match account");  
        }  
        else if(records.containsKey(VIN)) 
        { 
            System.out.println("VIN exists, adding to record");
            records.get(VIN).add(value); 
            System.out.println("Success!");
        } 
        else 
        {  
            System.out.println("New account made, record added!");
            Stack<Account> stack = new Stack<Account>(); 
            stack.add(value);
            records.put(VIN, stack); 
            System.out.println("Success!");
        }
    } 




    //driver method
    public static void main(String[] args) 
    { 
        CVR hello= new CVR(); 
        try 
        {
            //System.out.println("hello");
            //hello.generate(5);  
            Account abdcg=new Account("adsj4jandnj4", "abdcg", "perfect record");  
            Account abdcg1=new Account("adsj4jandnj4","abdcg1", "Fender Bender");
            /////
            hello.add("adsj4jandnj4", abdcg); 
            hello.add("adsj4jandnj4", abdcg1);
        } 
        catch (Exception e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
0
abdcg 17 April 2020, 22:56

1 menjawab

Jawaban Terbaik

Anda menggunakan string hardcode "VIN" di sini:

        System.out.println("VIN exists, adding to record");
        records.get("VIN").add(value); 
        System.out.println("Success!");

Seharusnya nilai variabel VIN:

        records.get(VIN).add(value); 

Kemungkinan besar Anda akan mendapatkan NullPointerException dilemparkan karena records.get("VIN") akan mengembalikan null tetapi penangan pengecualian Anda "menelan" semua pengecualian secara diam-diam. Buat blok tangkap mencetak sesuatu sehingga lain kali Anda akan mendapat peringatan.

    catch (Exception e) {
        e.printStackTrace();
    }
2
Joni 17 April 2020, 20:08