Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist

freeeeds

Neues Mitglied
Moin!

Ich bin ein blutiger Anfänger.

Ich habe mit biegen und brechen und viel lesen, irgendwie grob was hin bekommen, obwohl ich es auch ehrlich gesagt, noch nicht ganz verstehe.

Mein Ziel ist es, das aus der Zahlenreihe die schon fest in einer Arraylist (name "vorbereiten") ist,
3er blöcke als Arraylist innerhalb einer Arraylist (name "allelisten") zu machen, die zudem nach größe sortiert werden sollen.

Kein schöner weg,da ich jetzt noch was über "klassen" gelesen habe.

Also aus [31, 1, 34, 67, 22....]

soll werden: [[1, 31, 34], [22, 67, 88], [7, 28, 85]], [28....]]

So sieht es momentan aus : [[1, 31, 34], [1, 31, 34], [1, 31, 34]]

Ich wäre sehr froh, wenn mir da jemand helfen könnte.
Leider bin ich sehr unerfahren und wäre extrem erfreut wenn zur erklärung, auch ein Lösungsweg dabei wäre, da ich die Sprache noch nicht gut beherrsche🙂

Vielen dank und bleibt gesund!

Java:
package eds;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;

public class Test {

    public static void main(String[] args) throws FileNotFoundException {

        ArrayList<Integer> vorbereiten = new ArrayList<Integer>();
        vorbereiten.add(31);
        vorbereiten.add(1);
        vorbereiten.add(34);
        vorbereiten.add(67);
        vorbereiten.add(22);
        vorbereiten.add(88);
        vorbereiten.add(28);
        vorbereiten.add(7);
        vorbereiten.add(85);
        vorbereiten.add(94);
        vorbereiten.add(28);
        vorbereiten.add(91);
        vorbereiten.add(39);
        vorbereiten.add(13);
        vorbereiten.add(4);
           
            int AnzahlVorbereiten = vorbereiten.size();
            int drei= 3;
            double ergebnis = (double)AnzahlVorbereiten/drei;
           
                ArrayList<ArrayList<Integer>> alleListen = new ArrayList<>();
                ArrayList<Integer> tmp;
                for(int i=0;i<ergebnis;i++){              //warum macht er wegen "ergebnis" keine 5 durchläufe?
                    tmp=new ArrayList<>();
                    if(i==0){
                        tmp.add(vorbereiten.get(i));
                        tmp.add(vorbereiten.get(i+1));
                        tmp.add(vorbereiten.get(i+2));
               
                       int j[] = {1,2,3};
                     
                       for (int g = 0; g <j.length; g++) {
                           vorbereiten.remove(j[g]); //und warum löscht er die ersten 3 zahlen in "vorbereiten"
                                                       //nicht und nimmt nicht die 4 5 6 , 7 8 9 etc...
                          // System.out.print(tmp);
                         
                           Collections.sort(tmp);
           
                           alleListen.add(tmp);
                       }        
                    }
                    }
                System.out.print(alleListen);
               
    }}
 
for(int i=0;i<ergebnis;i++){ //warum macht er wegen "ergebnis" keine 5 durchläufe?
tmp=new ArrayList<>();
if(i==0){
tmp.add(vorbereiten.get(i));
tmp.add(vorbereiten.get(i+1));
tmp.add(vorbereiten.get(i+2));

int j[] = {1,2,3};

for (int g = 0; g <j.length; g++) {
vorbereiten.remove(j[g]); //und warum löscht er die ersten 3 zahlen in "vorbereiten"
//nicht und nimmt nicht die 4 5 6 , 7 8 9 etc...
// System.out.print(tmp);

Collections.sort(tmp);

alleListen.add(tmp);
}
}
}
System.out.print(alleListen);

}}[/CODE]
Hey, bin selbst noch am Anfang aber ich überlege mal mit und hoffe, die Experten korrigieren falls ich Blödsinn schreibe.
Wollte ohnhin mal was beitragen und als erster (sinnvoll) antworten 😀

zur 1. //Frage: macht er keine 5 Durchläufe? Wenn ergebnis=5 (ist ja der Fall) dann macht er 5 Durchläufe denke ich.

zur 2. //Frage: Habe mal fett markiert was mir ins Auge geschossen ist: Wenn i = 0, dann nimm i, nimm i+1 und nimm i+2. Wenn das dann passiert ist, ist i=1 (weil i++), womit die if(i==0) i+1-Geschichte nicht mehr ausgeführt wird und die Werte nicht mehr verändert werden.

Hoffe ich habe das richtig ersonnen ^^
 
zur 1. //Frage: macht er keine 5 Durchläufe? Wenn ergebnis=5 (ist ja der Fall) dann macht er 5 Durchläufe denke ich.
Korrekt und Du hast auch schon richtig beschrieben, warum in den folgenden Iterationen scheinbar nichts weiter passiert: das if-Statement prüft, ob i == 0 gilt und das ist nun einmal nur in der ersten Iteration der Fall.


@freeeeds, zur Frage in Zeile 44: Du hast ein Array j mit den Elementen 1, 2, 3. Die for-Schleife iteriert nun ein g über die Array-Indizes, so dass j[g] in der ersten Iteration 1, in der zweiten 2 und in der dritten 3 ist. Es wird also
Java:
vorbereiten.remove(1);
vorbereiten.remove(2);
vorbereiten.remove(3);
ausgeführt. Da wir Indizes ab 0 zählen, handelt es sich hier auch nicht um die ersten drei Elemente sondern um das zweite, dritte und vierte Element.

Warum nur einmal drei Elemente entfernt werden: s. o. bzw. die Antwort von @Wuast.
 

Zurück
Oben