studyklar
GdI 2 · Übungsblatt 7 · Aufgabe 1

Zwei Listen im Reißverschluss zusammenfügen

Zwei Listen sollen sich wie die Zähne eines Reißverschlusses verzahnen: erst ein Element aus der ersten Liste, dann eins aus der zweiten, dann wieder aus der ersten. Rechts steht das fertige Programm, die Zeilen zum aktuellen Schritt sind hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 1

Erstellen Sie eine Methode zum Zusammenfügen zweier Listen. Sie soll zwei Listen mit Strings als Parameter übergeben bekommen und die zusammengefügte Liste zurückgeben.

Beim Zusammenfügen der Listen wird jeweils vom Beginn der Listen ausgehend abwechselnd erst ein Element der ersten Liste und dann ein Element der zweiten Liste in die neue Liste eingefügt. Ist eine der beiden Listen länger als die andere, so werden ihre überzähligen Elemente in die neue Liste eingetragen – ohne dazwischen gefügte Elemente der anderen Liste.

Testen Sie die Methode anhand gleichlanger als auch anhand verschieden langer Listen – wobei einmal die erste Liste und einmal die zweite Liste die längere sein soll.

Gesucht ist eine Methode, also ein benanntes Stück Code, das man aufrufen kann. Sie bekommt zwei Listen mit Texten und gibt eine neue Liste zurück. In der neuen Liste stehen die Elemente abwechselnd: Stelle 0 der ersten Liste, Stelle 0 der zweiten, Stelle 1 der ersten, Stelle 1 der zweiten und so weiter.

Ist eine Liste länger, gibt es für ihre letzten Elemente keinen Partner mehr. Sie kommen einfach der Reihe nach ans Ende.

Merke: Eine Liste (List) ist wie ein Array, dessen Länge sich ändern kann. Man kann jederzeit Elemente anhängen, ohne vorher die Größe festzulegen.
  1. Die Methode schreiben: leere Ergebnisliste, Schleife über die Stellen, zurückgeben.
  2. Drei Tests: gleich lang, erste länger, zweite länger.

Der Kopf der Methode

    public static List<String> fuegeZusammen(List<String> liste1, List<String> liste2) {

Die Methode heißt fuegeZusammen. In den runden Klammern stehen ihre zwei Parameter, also die Werte, die sie beim Aufruf bekommt: liste1 und liste2. Ihr Typ ist List<String>: eine Liste, deren Elemente Strings (Texte) sind.

Vor dem Namen steht, was die Methode zurückgibt, ebenfalls List<String>. static heißt: Man ruft sie ohne Objekt auf, direkt aus main.

Aus Vorlesung 7, Folie 3 („Beispiel für eine Liste“): In den spitzen Klammern steht der Typ der Elemente. List<String> ist eine Liste, die nur Strings aufnehmen kann.

Eine leere Ergebnisliste anlegen

import java.util.ArrayList;import java.util.List;
        List<String> ergebnis = new ArrayList<>();

Die neue Liste soll die Eingaben nicht verändern. Darum legen wir eine eigene, noch leere Liste ergebnis an und füllen sie nach und nach.

List ist ein Interface: Es legt nur fest, was eine Liste können muss. Ein Objekt braucht eine Klasse, die das umsetzt; meist nimmt man ArrayList. Beide Namen stehen im Paket java.util und werden oben importiert.

Aus Vorlesung 7, Folie 9 („Interface und Implementierung“): Als Typ der Variablen nimmt man List, nicht ArrayList. So ließe sich ArrayList später gegen eine andere Liste austauschen, ohne den Rest zu ändern. <> hinter ArrayList heißt: Typ wie links, hier String.
Noch 8 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Das Programm ListenZusammenfuegung

Methode und drei Tests

Abbildung 1Das Programm ListenZusammenfuegung

Methode und drei Tests

import java.util.ArrayList;import java.util.List; public class ListenZusammenfuegung {     public static void main(String[] args) {        List<String> einserListe = List.of("EinsA", "EinsB", "EinsC", "EinsD", "EinsE");        List<String> zweierListe = List.of("ZweiA", "ZweiB", "ZweiC");        List<String> dreierListe = List.of("DreiA", "DreiB", "DreiC");         // beide gleich lang        System.out.println(fuegeZusammen(zweierListe, dreierListe));        // die erste Liste ist länger        System.out.println(fuegeZusammen(einserListe, zweierListe));        // die zweite Liste ist länger        System.out.println(fuegeZusammen(zweierListe, einserListe));    }     public static List<String> fuegeZusammen(List<String> liste1, List<String> liste2) {        List<String> ergebnis = new ArrayList<>();         for (int index = 0; index < liste1.size() || index < liste2.size(); index++) {            if (index < liste1.size()) {                ergebnis.add(liste1.get(index));            }            if (index < liste2.size()) {                ergebnis.add(liste2.get(index));            }        }         return ergebnis;    }}
LegendeDas ganze Programm.