2016-11-13 125 views
0

我创建了一个集和随机数(类型为int),我要添加到我的一套:如何将int值添加到设置<Integer>(HashSet <Integer>)?

private Set<Integer> mySet = new HashSet<Integer>(numElements); // capacity of 'numElements' 

Random r = new Random(); 
int rand = r.nextInt(maxVal - minVal + 1) + minVal; 
mySet.add(rand); // error: cannot convert int to Integer 

,所以我尝试了这些:

1. mySet.add(rand); // error: no suitable method found for add(int) 
2. mySet.add(Integer.valueOf(rand)); //error: cannot find symbol method valueOf(int) 
3. mySet.add(new Integer(rand)); // error: type parameter Integer cannot be instantiated directly 

他们都没有工作,所以我怎样才能将“rand”添加到我的设置中?

+1

你应该张贴在*完整*代码。显然,在你的作用域中有一个名为'Integer'的类型,它与'java.lang.Integer'不同。根据最后一条错误消息,它是一个类型参数,在方法或包含代码的类中声明。 – Holger

+0

可能重复[Autoboxing工作不正常](http://stackoverflow.com/questions/38464664/autoboxing-isnt-working-properly) – Tom

回答

0

必须创建Integer类型的对象:

Integer intObj = new Integer(i); 

iint类型。所以,在你的榜样

,这将是这样的:

private Set<Integer> mySet = new HashSet<Integer>(numElements); // capacity of 'numElements' 

Random r = new Random(); 
int rand = r.nextInt(maxVal - minVal + 1) + minVal; 
mySet.add(new Integer(rand)); 
+0

但当我试试这个:mySet.add(new Integer(rand));它不起作用。它写道“类型参数Integer不能直接实例化”。 即使我这样做也不起作用: Integer iRand = new Integer(rand); mySet.add(iRand); –

+0

ohh我刚刚看到你的编辑..所以我必须创建MyInteger类,扩展Integer用于将int添加到Set ? –

0

我成功地找到解决所有你试图将它们添加一个“廉政”价值的收藏品的问题的解决方案。我创建了这个类:

class Number { 
    int number; 
    Number(int num) { number = num; } 
} 

然后,在我的代码,我用它:

Number number = new Number(index); // index is int type 
mySet.add(number); // adding an object into a collection is legal 
+3

将自定义类型“Number”的对象添加到“Set ”不合法。如果编译器接受了这个,你事先已经改变了你的'Set'的类型。这很糟糕,因为它不能解决你创建'Set '的初始任务。 – Holger

+0

你是对的。我忘了写它,但我将Set类型从Integer更改为Number。 –

相关问题