# JAVA - ArrayList<Integer> mit int Werten füllen



## Zureh (15. November 2014)

*JAVA - ArrayList<Integer> mit int Werten füllen*

Hey Leute,

ich habe ein kleines Problem. Ich habe ein ArrayList<Integer> und will diese nun mit einem int füllen.

static ArrayList<Integer> Werte;
int wert = 8542;

Werte.Add(wert);

Funktioniert leider nicht. Ich habe schon herausgefunden, dass Integer eine Klasse ist. Int ist ja ein primitiver Datentyp, deshalb scheint es nicht zu gehen.

Weiß jemand, wie ich meinen int Wert in die ArrayList<Integer> bekomme?

EDIT: Ist ziemlich dringend :/ Ich wäre dankbar, wenn Ihr mir keinen Lösungsansatz, sondern die Lösung verratet. Danke!


----------



## fadade (15. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*

Was funktioniert denn nicht? Was für ein Fehlermeldung tritt auf?

Mit

```
static ArrayList<Integer> Werte [B]= new ArrayList<>();[/B]

...

int x = 324;
Werte.add(x);
```
klappts bei mir


----------



## Zureh (15. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*

Ich habe es so deklariert:
static ArrayList<Integer> Werte;

'<>' operator is not allowed for source level below 1.7

Habe leider in der Schule nur 1.6, deshalb muss ich es anders lösen.

Fehler: 


> Exception in thread "main" java.lang.NullPointerException
> at aufgabe4.Permutation.pruefeGleichung(Permutation.java:47)
> ...


----------



## Ahab (15. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*

Probiere es mal, ohne der ArrayList einen Typ zuzuweisen: 

```
ArrayList list = new ArrayList();
int wert = 2;
list.add(wert);
```

Das gibt zwar eine Warnung, wird aber kompiliert. Die Warnungen kannst du mit @SuppressWarnings("rawtypes") über der ArrayList und @SuppressWarnings("unchecked") über der entsprechenden Methode unterdücken.

Mein PSE-Dozent hat immer mit Rawtypes programmiert. Jetzt weiß ich auch endlich warum.


----------



## Zureh (15. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*



Ahab schrieb:


> Probiere es mal, ohne der ArrayList einen Typ zuzuweisen:
> 
> ```
> ArrayList list = new ArrayList();
> ...


 
Funktioniert zwar, allerdings bekomme ich dann an einer anderen Stelle ein Problem:

if (ergebnis == Werte.get(Werte.size() - 1))

Ich kann mein ergebnis (Double) ja nicht mit einem Element aus Werte (Object) vergleichen.


----------



## Ahab (15. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*

1. Warum speicherst du deine Werte dann nicht gleich als Doubles? 

2. Warum castest du deine Werte aus der Liste nicht in Doubles?


----------



## Rho (16. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*


```
ArrayList<Integer> Werte = new ArrayList<Integer>();
int wert = 8542;
Werte.Add(wert);
```

Funktioniert völlig problemlos, auch unter Java 1.6. Mir scheint, als hättest du ganz einfach vergessen, deine Liste zu initialisieren, bevor du versuchst ein Element hinzuzufügen. Darauf deutet zumindest die _NullPointerException_ hin. Außerdem ist der entsprechende Code in deinem Eingangsbeispiel nicht zu finden.

Dass es sich hier einmal um den Typ _int_ und einmal um _Integer_ handelt, muss dich dank Autoboxing/-unboxing nicht weiter kümmern. Der Vorschlag, keine Generics zu nutzen und alles selbst zu casten, ist übrigens ziemliche Grütze und hat mit deinem Problem auch nichts zu tun.


----------



## VikingGe (16. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*



> Ich kann mein ergebnis (Double) ja nicht mit einem Element aus Werte (Object) vergleichen.


Integer müsste man implizit zu int casten können, ansonsten gäbe es auch noch die Methode doubleValue.
Doubles mit Integern oder überhaupt mit == zu vergleichen ist nebenbei in den meisten Fällen eine schlechte Idee.



> Das gibt zwar eine Warnung, wird aber kompiliert. Die Warnungen kannst du mit @SuppressWarnings("rawtypes") über der ArrayList und @SuppressWarnings("unchecked") über der entsprechenden Methode unterdücken.


Genau wegen sowas würde ich _nie_ einem Anfänger empfehlen, mit Java anzufangen. 
Ich meine, was ist das? Ein Generic-Konzept, mit dem man nicht einmal ansatzweise typenischer programmieren kann, ist doch Mist.


----------



## Rho (16. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*



VikingGe schrieb:


> Ein Generic-Konzept, mit dem man nicht einmal ansatzweise typenischer programmieren kann, ist doch Mist.


 
Weshalb sollte man das mit Java nicht können?



VikingGe schrieb:


> Integer müsste man implizit zu int casten können


Ja, wie ich bereits geschrieben hatte, macht der Compiler das dank Autoboxing automatisch. Alle primitiven Typen haben in Java ihre entsprechenden Wrapper-Klassen mit deren Hilfe man sie in generischen Klassen/Methoden verwenden kann.


----------



## crys_ (16. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*



fadade schrieb:


> Was funktioniert denn nicht? Was für ein Fehlermeldung tritt auf?
> 
> Mit
> 
> ...


 
Das stimmt so schon. Der Fehler mit <> ist deswegen, weil die leeren <> erst aber Java 1.7 erlaubt sind. Bei 1.6 muss es so sein (klappt auch bei 1.7):

```
static ArrayList<Integer> Werte [B]= new ArrayList<Integer>();[/B]
```


----------



## VikingGe (18. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*



> Weshalb sollte man das mit Java nicht können?


Naja, hauptsächlich war es ein Rant, weil man nicht selten auf generische Klassen trifft, die zum Teil Methoden mit Object-Parametern oder -Returns haben, aber spätestens, wenn man so etwas wie

```
public static <T> T createSomethingFromList(List<T> xs) {
  T result = new T(); // Error
  [...]
}
```
braucht, hat man ein Problem und braucht nen Workaround, weil man keine Informationen über den Typen mehr hat.

Dafür lässt der Compiler einem so etwas hier durchgehen:

```
public static <T extends Comparable> T maximum(List<T> xs) {
  return (T)(new ArrayList<Float>(0)); // Autsch
}
```

Wenn man generische Funktionen dann außerhalb der eigentlichen Trägerklassen schreiben will, hat man ebenfalls ein Problem:

```
public static <T extends Comparable> T maximum(List<T> xs) {
  T result = null;
  for (T x: xs) { 
    if (result == null)
      result = x;
    else if (x.compareTo(result) > 0) // unchecked call to compareTo(T)...
      result = x;
  }
  return result;
}
```

Funktioniert zwar, schmeißt aber ne Warnung.


----------



## crys_ (18. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*

Ich glaub das greift für den TE zu tief


----------



## Rho (25. November 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*



VikingGe schrieb:


> Naja, hauptsächlich war es ein Rant, weil [...]



In dem Fall kann ich nur zustimmen.


----------



## seba0112 (26. Dezember 2014)

*AW: JAVA - ArrayList<Integer> mit int Werten füllen*



crys_ schrieb:


> Ich glaub das greift für den TE zu tief



 haha das glaub ich allerdings auch...


----------

