Java Aus ArrayList abfragen

Shamandalie

Cadet 3rd Year
Registriert
Dez. 2012
Beiträge
57
Irgendwas klappt nicht.
Ich hab das Gefühl ich sitze voll auf dem Schlauch.

Ich habe eine ArrayList - diese da:

ArrayList<Integer>a = new ArrayList<Integer>();

Da wird danach ein ergebnis (erg) ausgerechnet und im array in ein Feld gepackt.

a.add(erg)

Und dann soll es mir erst einmal ausgebenwas nun in dem Array steht. macht es auch.
Aber dann will ich, dass es wenn an in bestimmten Feldern die Zahlen 4, 2 und 1 stehen etwas bestimmtes ausgibt (hier mal aus Testzwecken die -2)

Bestimmt steht es an der falschen stelle oder ist falsch formuliert.
Kann mir jemand die Augen öffnen und mir einen Tipp geben wie es klappen kann?


System.out.println("Array Ergebnisse");
for (int i = 0; i < a.size(); i++) {
System.out.println("zaehler: " + i + " Ergebnis: " + a.get(i));
if (a.get(i-3)==4 && a.get(i-2)==2 && a.get(i-1) == 1){
return -2;
}
}
 
Deine if-Anweisung sollte meiner Meinung nach nicht funktionieren. Du suchst an einer Stelle die nicht existiert. i-3 würde im Falle von i = 0 an der Stelle -3 suchen. Die Indizes beginne allerdings an Stelle 0. Es müsste eine Exception kommen (irgendwas mit out of bounds)!?

Ich würde das so machen:
Code:
System.out.println("Array Ergebnisse");
for (int i = 0; i < a.size(); i++) {
         System.out.println("zaehler: " + i + " Ergebnis: " + a.get(i));
         if (a.get(i)==4 || a.get(i)==2 || a.get(i) == 1){
                 return -2;
         }
}
Wenn ich dein Problem richtig verstanden habe, würde ich außerdem statt && auf || zurückgreifen.

Passt das so? Oder meinst du was anderes bzw. hab ich nen Denkfehler?

MfG
 
Zuletzt bearbeitet:
Die Abfrage greift nicht, weil 4 oder eine andere Zahl vom Typ int (primitiv) ist. Um damit Erfolg zu haben, musst du den Integer (Objekt) zuerst konvertieren:
Code:
System.out.println("Array Ergebnisse");
for (int i = 0; i < a.size(); i++) {
         System.out.println("zaehler: " + i + " Ergebnis: " + a.get(i));
         if (a.get(i).intValue()==4 || a.get(i).intValue()==2 || a.get(i).intValue() == 1){
                 return -2;
         }
}
Finde übrigens auch, dass ein logisches ODER (||) hier sinnvoller ist, da sonst die Bedingung nur erfüllt ist, wenn alle drei Vergleiche wahr sind.
 
Hi,
ja, dass es nicht funktioniert hat war das Problem.
Das UND war schon beabsichtigt, da wirklich alle drei Vergleiche wahr sein müssen.
Werde mal ausprobieren ob es mit den Vorschlägen hier klappt. :)
 
Das && ergibt aber tatsächlich nur Sinn, wenn du in dem einen if-Ausdruck an verschiedenen Stellen prüfst. Daher wahrscheinlich die i-3, i-2 usw. Sofern du nach unseren Vorschlägen vorgehst, prüfst du zu dem Zeitpunkt nur an ein und derselben Stelle. Ein logisches Und macht da eigentlich keinen Sinn. Die Stelle 0 kann nicht gleichzeitig den Wert 4, 2 und 1 haben. Daher haben wir dir das Oder empfohlen. Allerdings weis ich auch nicht wirklich, ob es in unserem Vorschlag einen Unterschied macht. Logisch nicht aber durchlaufen sollte es denke ich trotzdem ohne Probleme mit && als auch || (ohne das ich es jetzt getestet habe). Evtl. erreichst du mit dem logischen Und auch nie das return-statement, was mit dem Oder definitiv passiert, solang mindestens einer der Werte 4. 2 oder 1 in der Liste vorkommen.

Viele Grüße...
 
Zuletzt bearbeitet:
Ich denke mal, dass du immer das element an der stelle i - 1 haben willst und die 2 elemente davor auch oder? Also das würdest du zumindest überprüfen in deinem codeausschnitt. das geht natürlich nur, wenn i mindestens 3 ist, da du sonst, wie schon geschrieben im negativen landest. bist du zum beispiel im schleifendurchlauf 1, dann ist dein i = 0. und 0-3 = -3. In deiner Liste gibt es aber kein Element an stelle -3. Daher fragst du einfach bevor du das hier machst:

if (a.get(i-3)==4 && a.get(i-2)==2 && a.get(i-1) == 1){
return -2;
}

noch ab, ob dein i schon größer oder gleich 3 ist:

if(i >= 3){
if (a.get(i-3)==4 && a.get(i-2)==2 && a.get(i-1) == 1){
return -2;
}
}
 
Zurück
Oben