gpt4 book ai didi

java - 向我的 HashMap 添加键值对时遇到困难

转载 作者:行者123 更新时间:2023-12-02 00:56:37 25 4
gpt4 key购买 nike

我正在尝试使用HashMap来存储键值对,其中键是字母数字字符串,值是另一个名为Account的类的堆栈。我现在正在编写 add 方法的代码,但遇到了问题。由于某种原因,代码在评估该键是否已存在于 HashMap 中时停止。

如果 VIN 与对象帐户的 VIN 不匹配,该方法应该做的是抛出异常,如果不是这种情况,它应该检查 VIN 是否已经在 HashMap 中,如果是,则应将帐户对象添加到与 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();
}
}
}

请注意,我对此很陌生,我刚刚了解 HashMap,这是我第一次使用它们,任何帮助将不胜感激!

**编辑:以下是所要求的完整 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();
}
}
}

最佳答案

您在此处使用硬编码字符串“VIN”:

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

它应该是变量 VIN 的值:

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

您很可能会抛出 NullPointerException,因为 records.get("VIN") 将返回 null,但您的异常处理程序会默默地“吞掉”所有异常。让 catch block 打印一些内容,以便下次您会收到警告。

    catch (Exception e) {
e.printStackTrace();
}

关于java - 向我的 HashMap 添加键值对时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61279674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com