2016-11-13 4 views
0

habe ich einen Satz und eine Zufallszahl (Typ int), die ich meinen Satz hinzufügen möchten:Wie fügt man int Set <Integer> (HashSet <Integer>) hinzu?

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 

so habe ich versucht, diese:

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 

Sie alle nicht so arbeiten Wie kann ich 'rand' zu meinem Set hinzufügen?

+1

Sie sollten die * komplette * Code schreiben. Offensichtlich haben Sie einen Typ mit dem Namen 'Integer' in Ihrem Bereich, der sich von' java.lang.Integer' unterscheidet. Gemäß der letzten Fehlermeldung handelt es sich um einen Typparameter, der entweder in der Methode oder in der Klasse deklariert ist, die Ihren Code enthält. – Holger

+0

Mögliches Duplikat von [Autoboxing funktioniert nicht richtig] (http://stackoverflow.com/questions/38464664/autoboxing-isnt-working-properly) – Tom

Antwort

0

Sie müssen Objekt vom Typ Integer erstellen:

Integer intObj = new Integer(i); 

i ein int Typ zu sein.

So in Ihrem Beispiel, wäre es so etwas wie:

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

aber wenn ich das versuche: mySet.add (new Integer (rand)); es funktioniert nicht. Es steht geschrieben, dass "type Parameter Integer nicht direkt instanziiert werden kann". und es funktioniert nicht, selbst wenn ich das tue: Integer iRand = new Integer (rand); mySet.add (iRand); –

+0

ohh Ich habe gerade Ihre Bearbeitung gesehen .. also muss ich MyInteger-Klasse erstellen, die Integer zum Hinzufügen von Int zu Set erweitert? –

0

ich es gelungen, eine Lösung zu finden, die das Problem aller Sammlungen löst, dass Sie versuchen, sie ein ‚int‘ Mehrwert zu schaffen. Ich habe diese Klasse:

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

Dann in meinem Code, habe ich es:

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

Das Hinzufügen eines Objekts Ihres benutzerdefinierten Typs 'Number' zu einem' Set 'ist * nicht * legal. Wenn dies vom Compiler akzeptiert wird, haben Sie zuvor den Typ Ihres 'Set's geändert. Dies ist kludging, da es Ihre anfängliche Aufgabe, ein 'Set ' zu erstellen, nicht löst. – Holger

+0

Sie haben Recht. Ich habe vergessen, es zu schreiben, aber ich änderte den Set-Typ von Integer zu Number. –

Verwandte Themen