我已经创建了一个哈希表,我正在尝试使用枚举来打印出键和值。当我尝试编译代码时,我不断收到编译时错误,说我需要在哈希表中添加'['in new double'。
编译前: toys.put(“赛车”,新双(29.99));
编译时错误说我需要这样放置:
toys.put(“赛车”,新双[29.99]);
我在做错了什么?public static void main(String[] args) {
Hashtable toys = new Hashtable();
Enumeration toyName;
String getToyName;
double priceOfToy;
toys.put("Race Car", new double(29.99));
toys.put("Toy Bear", new double(15.99));
toys.put("Action Figure", new double(9.99));
//Show prices of each toy
toyName = toys.keys();
//Uses hasMoreElements method from enumeration to check what is in the hashtable
while (toyName.hasMoreElements()) {
//uses nextElement method from enumeration interface to
getToyName = (String) toyName.nextElement();
System.out.println(getToyName + "is now priced at " + toys.get(getToyName));
}
}
答案 0 :(得分:2)
Java集合无法保存基本类型。你需要改变
toys.put("Race Car", new double(29.99))
到
toys.put("Race Car", new Double(29.99))
使用Double
包装器类型。
您也可以使用
自动装箱toys.put("Race Car", 29.99)
请注意,我没有对最后一个进行测试以确保其有效。
答案 1 :(得分:1)
double
是原始类型。请改用包装类Double
。由于泛型的限制,集合不能保存原始类型的值,你必须使用包装器。
编译器显示此警告,因为它假设您要实例化一个数组,可以使用new double [22]
来完成。
此外,如果您使用Java 1.5或更高版本,您可以使用原始值代替包装器值,它们将自动转换为包装对象。
答案 2 :(得分:1)
Map只接受Objects,而不接受基元,double是基元,Double是Object。 并考虑为您的集合使用泛型类型:
Hashtable<String, Double> toys = new Hashtable<String, Double>();
toys.put("Race Car", new Double(29.99));
toys.put("Toy Bear", new Double(15.99));
toys.put("Action Figure", new Double(9.99));}
答案 3 :(得分:0)
包装double
的类是Double
(大写很重要)。
所以:
toys.put("Race Car", new Double(29.99));
或者,从Java 5开始,自动装箱(自动将双转换为双倍),所以
toys.put("Race Car", 29.99d));
完全一样。
答案 4 :(得分:0)
使用Double
类
toys.put("Race Car", new Double(29.99));
toys.put("Toy Bear", new Double(15.99));
toys.put("Action Figure", new Double(9.99));
或java原语double
toys.put("Race Car", 29.99); // Java 1.5 or higher, makes use of inboxing
toys.put("Toy Bear", 15.99);
toys.put("Action Figure", 9.99);
Java原语不是类,也没有构造函数。