Potenzmenge der Zahlen von 1 bis n

A

alX1111

Mitglied
Hallo zusammen!
Ich probier schon ewig rum mit folgendem Code. Es wäre toll, wenn jemand die Zeit finden würde, kurz was dazu zu schreiben!! Vielen Dank schon mal vorab!!

Es soll eine rekursive Methode potenzmenge(n) geschrieben werden, die die Potenzmenge der Zahlen von 1 bis n zurückgibt.
Folgender Kopf ist zwingend vorgegeben:

Java:
static ArrayList<ArrayList<Long>> potenzmenge(long n)
    {
        //Rueckgabe pm ist Potenzmenge der Zahlen von 1 bis n
        ArrayList<ArrayList<Long>> pm = new ArrayList<>();

Prinzipiell sollte die Logik der folgenden Umsetzung stimmen, aber wohl ist an der Syntax einiges falsch!

Java:
import java.util.ArrayList;

public class H_2017_7
{
    public static void main(String[] args)
    {
        System.out.println(potenzmenge(3L));
    }

    static ArrayList<ArrayList<Long>> potenzmenge(long n)
    {
        //Rueckgabe pm ist Potenzmenge der Zahlen von 1 bis n
        ArrayList<ArrayList<Long>> pm = new ArrayList<>();

        //Basisfall
        if(n==0L){
            return pm.add(new ArrayList<>());  //Hier soll eine ArrayList mit der leeren Menge als Inhalt zurückgegeben werden
        } else {
            for(ArrayList<Long> menge : potenzmenge(n-1)){
                pm.add(menge);
                pm.add(menge.add(new ArrayList<>(n)));
            }
        return pm;
        }
    }
}
 
Zuletzt bearbeitet:
kneitzel

kneitzel

Top Contributor
Und dann auch einmal Compiler-Fehler prüfen und wenn Dir Fehler nichts sagen, dann entsprechend Fragen.

ArrayList.add gibt nicht die ArrayList zurück sondern ein Boolean. Daher kann das Konstrukt mit dem return pm.add(...) nur falsch sein und sollte einen Compile-Fehler zurück geben.

Also generell wenn man so Code geschrieben hat: Immer die genauen Fehler benennen, die entweder beim Übersetzen oder beim Ausführen kommen. Wenn beim Ausführen kein Fehler kommt, dann klar sagen, was passiert und was Du erwartest. Ansonsten ist das nur ein Ratespiel und das macht wenig Sinn.
 
A

alX1111

Mitglied
Vielen Dank für die Antwort!

In dem Schleifendurchlauf

Java:
for(ArrayList<Long> menge : potenzmenge(n-1)){
                pm.add(menge);
                pm.add(menge.add(new ArrayList<>(n)));
}

möchte ich die ArrayList aus ArrayList Objekten (=pm) befüllen.
Und zwar zunächst mit den Ergebnissen des rekursiven Funktionsaufrufs (=menge).
(Das würde z.B. für n-1= 2 so aussehen: menge={} bzw. menge={1} bzw. menge={2} bzw. menge={1,2} )
Danach möchte ich noch an jedes dieser Ergebnisse (=menge) die Zahl n anhängen
(also dann für n=3: {3} bzw. {1,3} bzw. {2,3} bzw. {1,2,3})
und das ganze wiederum in die ArrayList pm einfügen.
pm soll dann in obigem Beispiel n=3 so aussehen: [{},{3},{1},{1,3},{2},{2,3},{1,2},{1,2,3}]

Mein obiger Code-Schnipsel macht das leider nicht - was muss ich da ändern?
 
Zuletzt bearbeitet:
B

Barista

Top Contributor
Es soll eine rekursive Methode potenzmenge(n) geschrieben werden, die die Potenzmenge der Zahlen von 1 bis n zurückgibt.
Viel interessanter fände ich, wenn ein Iterator/Iterable geschrieben werden sollte, der jeweils einen Iterator/Iterable für jede Teilmenge zurückgibt.
Als Nebenbedingung ist die Verwendung jeglicher Collections (auch selbst geschriebene) und Arrays verboten.
 
A

alX1111

Mitglied
Wow! Nach einigem rumprobieren scheint es echt geklappt zu haben mit meinem Freund ArrayList.clone() !! ;)
Habs jetzt folgendermaßen gemacht:
Java:
for(ArrayList<Long> menge : potenzmenge(n-1)){
                pm.add(menge);
                pm1=(ArrayList<ArrayList<Long>>)pm.clone();
                menge1=(ArrayList<Long>)menge.clone();
                menge1.add(n);
                pm.add(menge1);
            }
            return pm;
 
A

alX1111

Mitglied
Also insgesamt (falls es jemanden interessiert;)):
Java:
import java.util.ArrayList;

public class H_2017_7
{
    public static void main(String[] args)
    {
        System.out.println(potenzmenge(3L));
    }

    static ArrayList<ArrayList<Long>> potenzmenge(long n)
    {
        //Rueckgabe pm ist Potenzmenge der Zahlen von 1 bis n
        ArrayList<ArrayList<Long>> pm = new ArrayList<>();
        ArrayList<ArrayList<Long>> pm1 = new ArrayList<>();
        ArrayList<Long> menge1 = new ArrayList<>();

        //Basisfall
        if(n==0L){
            pm.add(new ArrayList<>());  //Hier soll eine ArrayList mit der leeren Menge als Inhalt zurückgegeben werden
            return pm;
        } else {
            for(ArrayList<Long> menge : potenzmenge(n-1)){
                pm.add(menge);
                pm1=(ArrayList<ArrayList<Long>>)pm.clone();
                menge1=(ArrayList<Long>)menge.clone();
                menge1.add(n);
                pm.add(menge1);
            }
            return pm;
        }
    }
}

Vielen Dank an alle für die Hilfe!
 
kneitzel

kneitzel

Top Contributor
A

alX1111

Mitglied
Ja, über den Konstruktor bin ich auch schon gestolpert und eigentlich sollte da auch stehen:

Java:
static List<List<Long>> potenzmenge (long n){
    List<List<Long>> pm = new ArrayList<>();
    
}

usw.

Aber leider check ich überhaupt nicht, wie man das umsetzen soll! Auch nach einiger Recherche über den Constructor...
Wie schreibt man denn den in diesem Beispiel?
 
mihe7

mihe7

Top Contributor
Das war so gemeint:

Java:
import java.util.ArrayList;

public class H_2017_7
{
    public static void main(String[] args)
    {
        System.out.println(potenzmenge(3L));
    }

    static ArrayList<ArrayList<Long>> potenzmenge(long n)
    {
        //Rueckgabe pm ist Potenzmenge der Zahlen von 1 bis n
        ArrayList<ArrayList<Long>> pm = new ArrayList<>();

        //Basisfall
        if(n==0L){
            pm.add(new ArrayList<>());  //Hier soll eine ArrayList mit der leeren Menge als Inhalt zurückgegeben werden
        } else {
            for(ArrayList<Long> menge : potenzmenge(n-1)){
                pm.add(menge);
                ArrayList<ArrayList<Long>> pm1= new ArrayList<>(pm);
                ArrayList<Long> menge1=new ArrayList<>(menge);
                menge1.add(n);
                pm.add(menge1);
            }
        }
        return pm;
    }
}
 
A

alX1111

Mitglied
Das war so gemeint:

Java:
import java.util.ArrayList;

public class H_2017_7
{
    public static void main(String[] args)
    {
        System.out.println(potenzmenge(3L));
    }

    static ArrayList<ArrayList<Long>> potenzmenge(long n)
    {
        //Rueckgabe pm ist Potenzmenge der Zahlen von 1 bis n
        ArrayList<ArrayList<Long>> pm = new ArrayList<>();

        //Basisfall
        if(n==0L){
            pm.add(new ArrayList<>());  //Hier soll eine ArrayList mit der leeren Menge als Inhalt zurückgegeben werden
        } else {
            for(ArrayList<Long> menge : potenzmenge(n-1)){
                pm.add(menge);
                ArrayList<ArrayList<Long>> pm1= new ArrayList<>(pm);
                ArrayList<Long> menge1=new ArrayList<>(menge);
                menge1.add(n);
                pm.add(menge1);
            }
        }
        return pm;
    }
}
Ah, ok!
Vielen Dank!!
So isses wirklich nochmal wesentlich schöner!
 
A

alX1111

Mitglied
clone hat noch zwei Freunde.

Diesen Konstruktor
ArrayList(Collection<? extends E> c)

und die Methode
addAll(Collection<? extends E> c)
Ja, über den Konstruktor bin ich auch schon gestolpert und eigentlich sollte da auch stehen:

Java:
static List<List<Long>> potenzmenge (long n){
List<List<Long>> pm = new ArrayList<>();

}


usw.

Aber leider check ich überhaupt nicht, wie man das umsetzen soll! Auch nach einiger Recherche über den Constructor...
Wie schreibt man denn den in diesem Beispiel?
 
A

alX1111

Mitglied
Keine Ahnung, ob das mit ArrayList(Collection<? extends E> c) und addAll(Collection<? extends E> c) so gemeint war,
aber ich habs jetzt nochmal etwas umgeschrieben und bin jetzt sehr zufrieden!! Vielen Dank nochmal an alle!

Java:
import java.util.*;

public class H_2017_7A
{
    public static void main(String[] args)
    {
        System.out.println(potenzmenge(3L));
    }

    static List<List<Long>> potenzmenge(long n)
    {
        //Rueckgabe pm ist Potenzmenge der Zahlen von 1 bis n
        List<List<Long>> pm = new ArrayList<>();

        //Basisfall
        if(n==0L){
            pm.add(new ArrayList<>());  //Leere Menge zu pm hinzufügen
        } else {
            for(List<Long> menge : potenzmenge(n-1)){
                pm.add(menge);  //Zufügen aller Mengen der potenzmenge(n-1) zu pm
                List<Long> menge1=new ArrayList<>(menge);
                menge1.add(n);  //Zufügen von n zu jeder menge aus potenzmenge(n-1) und anschliessendes
                pm.add(menge1);  //Zufügen der so erhaltenen Mengen zu pm
            }
        }
        return pm;
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
A String auf Zahlen überprüfen Allgemeine Java-Themen 5
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
O Variablen Addition von Double-Werten ergibt seltsame 0.9999999 Zahlen Allgemeine Java-Themen 2
B Zufällig zwischen vorgegebenen Zahlen auswählen Allgemeine Java-Themen 6
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
M Zahlen in Array anordnen Allgemeine Java-Themen 8
D Erste Schritte Arrays vergleichen und die zahlen die nur einmal vorkommen ausgeben Allgemeine Java-Themen 5
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
T Tesseract OCR mit Zahlen Allgemeine Java-Themen 1
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
F Zahlen zu Bits Allgemeine Java-Themen 3
S Überprüfen, ob 5 Zahlen nebeneinander liegen Allgemeine Java-Themen 5
R Große Zahlen in Worten abkürzen Allgemeine Java-Themen 10
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
D Operatoren Logischer Rightshift von negativen Zahlen auf Bit-Ebene Allgemeine Java-Themen 7
L 2-Dimensionaler String: Zahlen verschieben Allgemeine Java-Themen 10
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
H Fibonacci-Zahlen Allgemeine Java-Themen 5
B Zahlen manuell eingeben und in Array Speichern Allgemeine Java-Themen 2
E mit extrem langen Zahlen (als Zeichneketten) arbeiten Allgemeine Java-Themen 4
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
L Filewriter schreibt Zahlen in Textdatei Allgemeine Java-Themen 2
T Methoden Zahlen austauschen Allgemeine Java-Themen 8
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
M ungerade zahlen auf 4 zahlen aufteilen Allgemeine Java-Themen 2
F Funktionsplotter komplexe Zahlen: geeignetes 3D-Koordinatensystem Allgemeine Java-Themen 16
B Zahlen ausgeben hilfe! Allgemeine Java-Themen 8
S Zahlen aus (String mit zahlen) immer wieder neu auslesen Allgemeine Java-Themen 5
N Bin to Dez und umgekehrt mit sehr großen Zahlen Allgemeine Java-Themen 2
T Modulo-Operator versagt bei zu großen Zahlen? Allgemeine Java-Themen 14
AssELAss String mit Zahlen mit Tausendertrennzeichen versehen Allgemeine Java-Themen 14
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
U (Java) Happy Numbers in Anlehnung an den Sieb des Eratosthenes (Glueckliche Zahlen) Allgemeine Java-Themen 1
J Array ohne vorher festgelegte Länge oder Wie wandle ich Zahlen in Zahlen mit anderen Basen um? Allgemeine Java-Themen 6
Cayton Bruchrechner stürzt bei eingabe negativer Zahlen ab Allgemeine Java-Themen 4
N Zahl mit bestimmter Länge und nur bestimmten Zahlen generieren lassen Allgemeine Java-Themen 7
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
I Java-Programm: Zahlen in Worte Allgemeine Java-Themen 22
H String auf Zahlen prüfen Allgemeine Java-Themen 4
V iText Textfelder mit Zahlen! Allgemeine Java-Themen 2
M Rechnen mit kleinen Zahlen langsamer!? Allgemeine Java-Themen 11
R Modulo mit negativen Zahlen Allgemeine Java-Themen 8
Luk10 Römische Zahlen in Java Allgemeine Java-Themen 7
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
GianaSisters ArrayList mit Zahlen Allgemeine Java-Themen 10
B User-Input aus Zahlen und Operatoren - beste Umsetzung? Allgemeine Java-Themen 8
S Fixe Zahlen vergleichen Allgemeine Java-Themen 4
D JTable -> 1Spalte nur zahlen Allgemeine Java-Themen 2
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
T Apache POI Export EXCEL - [Zahlen-Werte] Allgemeine Java-Themen 1
ModellbahnerTT Button mit Zahlen beschriften Allgemeine Java-Themen 1
J Zahlenkombination aus int-array, mit absteigenden Zahlen Allgemeine Java-Themen 6
P große double Zahlen und modulo Allgemeine Java-Themen 8
R Runden von Zahlen Allgemeine Java-Themen 3
J Zahlen Rechtsbuendig in File schreiben Allgemeine Java-Themen 3
W POI - Formatierung für Zahlen Allgemeine Java-Themen 4
MQue Zahlen mit Border Allgemeine Java-Themen 2
T ungerade zahlen berechnen Allgemeine Java-Themen 3
N Zahlen mit Nachkommastellen aus Textfeldern einlesen Allgemeine Java-Themen 6
P Algoritmus für 3er-Paare von n Zahlen Allgemeine Java-Themen 12
A Fibonacci-Zahlen & kopfgesteuerte Schleifen & Strukt Allgemeine Java-Themen 8
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
G die mittlere von 5 Zahlen nur mit if und else finden Allgemeine Java-Themen 48
M Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 8
MQue Zahlen an alysieren Allgemeine Java-Themen 6
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
V FileWriter und Zahlen (Kein Problem, nur Verständnisfrage) Allgemeine Java-Themen 4
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
F 3 Zahlen "vereinfachen" Allgemeine Java-Themen 5
C double Zahlen mit drei NachkommaStellen in String umwandeln Allgemeine Java-Themen 2
A testen ob Primzahl dauert bei größeren zahlen extrem lange Allgemeine Java-Themen 8
E Hex- Zahlen in Datei Allgemeine Java-Themen 4
G Umrechnen von grossen Zahlen ins Hex-System Allgemeine Java-Themen 3
S Zahlen sortieren Allgemeine Java-Themen 3
D Zahlen innerhalb eines Strings auslesen Allgemeine Java-Themen 3
P rechnen mit extrem grossen zahlen Allgemeine Java-Themen 2
X Logische Operatoren auf binären Zahlen Allgemeine Java-Themen 2
F Array mit Zahlen drin sortieren Allgemeine Java-Themen 2
M Hilfe: Lotto: die 6 häufigsten generierten zahlen ausgeben Allgemeine Java-Themen 13
O String auf zahlen prüfen (java 1.3) Allgemeine Java-Themen 4
G Methode, die Buchstaben in Zahlen umwandelt? Allgemeine Java-Themen 13
S Integer-Zahlen in Excel-Sheet schreiben Allgemeine Java-Themen 10
M Lange Zahlen in Java Allgemeine Java-Themen 4
C zahlen einlesen Allgemeine Java-Themen 2
thE_29 Wie hex Zahlen darstellen Allgemeine Java-Themen 3
G Zahlen vergleichen Allgemeine Java-Themen 5
S Rechnen mit float Zahlen Allgemeine Java-Themen 2
H Kann keine Zahlen von Buchstaben unterscheiden Allgemeine Java-Themen 4

Ähnliche Java Themen


Oben