2016-11-13 41 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。 –

相關問題