我正在做一个大学项目,我有一个关键的多个值。这是我的代码
import java.util.Hashtable;
private Hashtable name2email;
name2email = new Hashtable();
@Override
public void record_user(String name, String email, String address, String phonenumber, double accountnumber, double credit) throws user_exists {
if (name2email.containsKey(name)||
name2email.contains(email)||
name2email.contains(address)||
name2email.contains(phonenumber)||
name2email.contains(credit)||
name2email.contains(accountnumber))
{
throw new user_exists();
}
name2email.put(name, email,address,accountnumber,phonenumber,credit);
}
由于我的任务规格,我使用的是HashTable。有什么建议?是的,这是我要回来的错误
no suitable method found for put(String,String,String,double,String,double)
method Hashtable.put(Object,Object) is not applicable
(actual and formal argument lists differ in length)
我该怎么办?
答案 0 :(得分:6)
创建一个包含所有这些值的类,实例化此对象并将用户名映射到这些“用户详细信息”对象。
答案 1 :(得分:1)
创建一个User类(即域对象),其中包含:
通常,如果您使用自己的类作为Map键,那么您要考虑默认(即java.lang.Object)hashcode()/ equals()方法是否符合您的要求(即定义标识)正确。
正确实现hashCode()和equals()并非易事 - 请仔细阅读这些方法的java.lang.Object API文档。一个体面的IDE会为你实现hashCode()和equals(),如果你告诉它哪些字段来计算它们,这通常比滚动你自己更安全。
然后使用HashMap将用户映射到电子邮件地址。 (为什么电子邮件地址不是用户的成员?如果用户有多个电子邮件地址怎么办?)
(首选HashMap到Hashtable。如果你需要一个线程安全的Map,那么使用ConcurrentHashMap或Collections.synchronizedMap()。)
答案 2 :(得分:0)
哈希表使用键值对。
显然 name2email.put(name, email,address,accountnumber,phonenumber,credit);
违反了Hashtable put语法。相反,你需要做这样的事情
name2email.put(name,new User(name,email,address,accountnumber,phonenumber,credit);
你的name2email定义应该是这样的:
Hashtable<String,User> name2email= new Hashtable<String,User>();
检查是否存在您需要执行的记录:
User u = name2email.get(name);
if(u.getName().equals(name) || u.getEmail().equals(email)...(rest of your logic).
{ ...your user exists
}
else put(name,new User(name,email,address,accountnumber,phonenumber,credit);