Wie bekomme ich aus einer Zahlenreihe, einer Arrayreihe innerhalb einer arraylist?

2 Antworten

Wenn du in 3er Gruppen die Zahlenreihe organisieren lassen willst musst du auch 3er Sprünge machen, also war dein Ansatz nicht falsch nur ist darin ein logischer Fehler, weil dem Compiler schrurzegal ist welchen Blödsinn du anstellst.

Schau mal deine Schleife, ich kommentiere das mal:

            for(int i=0;i<10;i++){ // müsstest du hier nicht eher i=i+3 einsetzen?
                tmp=new ArrayList<>();
                if(i==0){ // nur wenn i==0?
                    tmp.add(vorbereiten.get(0)); // immer das 0te Element? was ist mit i?
                    tmp.add(vorbereiten.get(1)); // i+1 uws.
                    tmp.add(vorbereiten.get(2));
                }
                else{
                    tmp=(ArrayList<Integer>) alleListen.get(i-1).clone(); // mir fehlen die Worte
                    
                }
                alleListen.add(tmp); // ok, das könnte gehen
            }

Du solltest objektorientiert denken, Arraylisten sind verschachtelbar aber Klassen bieten noch weitaus mehr.

Sorry, weil ich dir das nicht mit einem C++ Beispiel coden kann.

Woher ich das weiß:Berufserfahrung

Das Prinzip für die Aufteilung sollte so sein:

Iteriere in Dreierschritten durch die Quellliste (zähle dabei den Index mit)
  Lege neue Liste an
  Füge Eintrag von Index ein
  Füge Eintrag von Index + 1 (= Nachfolgeelement) ein
  Füge Eintrag von Index + 2 (= Nachnachfolgeelement) ein
  Füge neue Liste der Zielliste an

Dabei musst du beim Einfügen aufpassen. Da du nicht sicher sein kannst, dass die Länge der Quellliste teilbar durch drei ist, kannst du auch nicht fest davon ausgehen, dass im allerletzten Iterationsschritt noch ein Nachfolge-/Nachnachfolgeelement ermittelt werden kann. Nimm nur diese Liste einmal als Beispiel:

2, 0, 4, 1

Die Länge ist 4. Im ersten Iterationsschritt werden die Elemente an Index 0, 1 und 2 gezogen (2, 0 und 4). Im zweiten Iterationsschritt würde der Algorithmus die Indizes 3, 4 und 5 suchen und nur beim ersten nicht scheitern. Prüfe also erst anhand der Länge der Quellliste, ob es diese Indizes geben kann, bevor du versuchst, auf sie zuzugreifen.

Nun fehlt an sich nur noch die Sortierung der Elemente. Eine Einsortierung könnte beim Einfügen geschehen

Iteriere durch neue Liste
  Wenn neues Element > aktuelles Element
    Füge an Position nach aktuellem Element ein

oder erst im Anschluss, wenn alle Elemente schon eingefügt wurden. Hierbei könnte man eine Unterscheidung nach Länge der Liste vornehmen. Bei nur einem Element ist bspw. keine Sortierung nötig, bei zwei Elementen maximal ein Positionsaustausch. Bei drei Elementen könnte man den Lösungsweg für zwei Elemente ausbauen bzw. einen Sortieralgorithmus (wie Bubblesort, Insertionsort) einsetzen (die einzelnen Schritte evt. gar ausgerollt, also ohne Schleife).

Zudem weiss ich nicht, was ich anstatt der "10" bei "i<10; i++" einfügen muss, damit die ganze liste einmal durchgenommen wird.

In der API Referenz kannst du alle Methoden nachschlagen, die der ArrayList zur Verfügung stehen: ArrayList. Die size-Methode wäre für deinen Fall passend.

int length = vorbereiten.size();