Я пытаюсь использовать HashMap
для хранения пар ключ-значение, где ключом является строка Alphanumeri c, а значением является стек другого класса с именем Account. Я пишу код для метода add прямо сейчас, и я столкнулся с проблемой. По какой-то причине код просто останавливается, когда дело доходит до оценки того, существует ли ключ в HashMap
.
Что должен сделать метод, это вызвать исключение, если VIN не совпадает с VIN учетной записи объекта, если это не так, следует проверить, находится ли VIN в HashMap
, если он is is должен добавить объект account в стек, связанный с VIN, если он не существует, он должен создать стек, добавить значение в стек и добавить пару ключ-стек в HashMap
Вот что я попробовал до сих пор:
//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();
}
}
}
Пожалуйста, обратите внимание, что я новичок в этом, я только что узнал о HashMaps, и я впервые использую их, любая помощь будет оценена!
** edit: Вот полный код CVR по запросу:
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();
}
}
}