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

Zureh

Freizeitschrauber(in)
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!
 
AW: JAVA - ArrayList<Integer> mit int Werten füllen

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

Mit
Code:
static ArrayList<Integer> Werte [B]= new ArrayList<>();[/B]

...

int x = 324;
Werte.add(x);
klappts bei mir
 
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)
...
 
AW: JAVA - ArrayList<Integer> mit int Werten füllen

Probiere es mal, ohne der ArrayList einen Typ zuzuweisen:
Code:
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. :ugly:
 
Zuletzt bearbeitet:
AW: JAVA - ArrayList<Integer> mit int Werten füllen

Probiere es mal, ohne der ArrayList einen Typ zuzuweisen:
Code:
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. :ugly:

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.
 
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?
 
AW: JAVA - ArrayList<Integer> mit int Werten füllen

Code:
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.
 
Zuletzt bearbeitet:
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. :ugly:
Ich meine, was ist das? Ein Generic-Konzept, mit dem man nicht einmal ansatzweise typenischer programmieren kann, ist doch Mist.
 
AW: JAVA - ArrayList<Integer> mit int Werten füllen

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

Weshalb sollte man das mit Java nicht können?

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.
 
Zuletzt bearbeitet:
AW: JAVA - ArrayList<Integer> mit int Werten füllen

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

Mit
Code:
static ArrayList<Integer> Werte [B]= new ArrayList<>();[/B]

...

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

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):
Code:
static ArrayList<Integer> Werte [B]= new ArrayList<Integer>();[/B]
 
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
Code:
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:
Code:
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:
Code:
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.
 
Zurück