Alle Zahlenkombinationen aus 9 zahlen finden

DaCrazyJavaExpert

Bekanntes Mitglied
Hallo,
ich habe versucht aus einem Integer-Array mit den Zahlen 1 bis 9
Integer[] neunZahlen = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
alle Zahlenkombinationen zu finden. Ich weiß aber nicht genau wie ich das richtig angehen soll...
Also sowas hier z.B. war einer meiner Versuche, aber irgendwie kann man aus einem Array die Zahlen nicht in ArrayList packen... :
Java:
package ZahlenErmittler;

import java.util.ArrayList;
import java.util.List;

public class Zahlenermittler {

    public static void main(String[] args) {
        Integer[] neunZahlen = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        List<Integer> zahlen = new ArrayList<>();
        for(Integer neunZahl : neunZahlen) {
            neunZahl.add(zahlen); //die Methode add() hat hier eine Feheler gezeigt.
        }
    }
}

Außerdem hab ichs noch mit einer for-each Schleife prbiert, alle zahlen durchzugehen, aber dies hat auch nicht geklappt. Ich stehe ein wenig auf dem Schlauch :c.
Danke für Hilfe!
 
neunZahl.add(zahlen); //die Methode add() hat hier eine Feheler gezeigt.
Schau mal genauer hin auf welchem Objekt du die Methode add() gerade aufrufst 😉
Momentan versuchst du einem Integer eine Liste hinzuzufügen. Du willst ja aber einer Liste einen Integer hinzufügen 😛

Übrigens: Du kannst auch zahlen.addAll(Arrays.asList(neunZahlen)); benutzen
 
Schau mal genauer hin auf welchem Objekt du die Methode add() gerade aufrufst 😉
Momentan versuchst du einem Integer eine Liste hinzuzufügen. Du willst ja aber einer Liste einen Integer hinzufügen 😛

Übrigens: Du kannst auch zahlen.addAll(Arrays.asList(neunZahlen)); benutzen
Oh danke 😛.
Und wieder ne neue methode gelernt. Ich versuchs mal 😀
 
Kleiner Hinweis falls es bei der eigentlichen Logik noch klemmt: Der Fachbegriff für "Alle Kombinationen einer bestimmten Menge rausfinden" ist die "Permutation". Mit dem Fachbegriff wirst du dann zu diesem Problem ggf. schneller bei Google und Co. fündig.
 
Kleiner Hinweis falls es bei der eigentlichen Logik noch klemmt: Der Fachbegriff für "Alle Kombinationen einer bestimmten Menge rausfinden" ist die "Permutation". Mit dem Fachbegriff wirst du dann zu diesem Problem ggf. schneller bei Google und Co. fündig.
Weil es falsch wäre ! Wie du schon leicht erkennst ist 999999999 keine gültige Permutation von 1,2,3,4,5,6,7,8,9
Also ich weiß zwar nicht, was der OP meint, aber eine "Kombination" ist etwas anderes als eine "Permutation". Siehe https://de.wikipedia.org/wiki/Kombination_(Kombinatorik)

Eine Kombination ist eine Auswahl von Objekten aus einer gegebenen Grundmenge, die (im Gegensatz zur Permutation) nicht alle Objekte der Grundmenge enthalten muss und bei der (ebenfalls im Gegensatz zur Permutation) die Reihenfolge unberücksichtigt bleibt. Können Objekte dabei mehrfach ausgewählt werden, so spricht man von einer Kombination mit Wiederholung, darf dagegen jedes Objekt nur genau einmal auftreten, spricht man von einer Kombination ohne Wiederholung.

Beim Hochzählen hat man allerdings das Problem, dass etwa 123 und 321 eigentlich die "gleiche" Kombination aus 1,2,3 ist, zudem kommt beim Hochzählen ja auch die 0 vor.
 
Zu starten in der Kommandozeile.
> HW.exe > HW.txt

Funktion a gibt alle Kombinationen der Menge 1 bis 9 der Länge 3 mit Wiederholungen aus,
Funktion b gibt alle Kombinationen der Menge 1 bis 9 der Länge 3 ohne Wiederholungen aus (auch Permutationen geheißen).

Beispiel.
Funktion a:
111
112
113
114
115
116
117
118
119
121
122
123 ....
Funktion b:
123
124
125
126
127
128
129
132
134
135
136
137
138
139
142
143
145 ....

Ich denke, ich habe deine Beschreibung des gesuchtem verstanden. Gern kann ich den Code offenlegen.

Länge 10 oder wtf(?) schien mir jetzt doch zu lang.
 

Anhänge

Das ist ja der Sinn der Frage
Nagut, aber nur, weil du es bist ....

Pseudo-Funktion a:
C:
    for (i = 0; i != -1;)
    {
        if (i == 3)
        {
            for (j = 0; j < 3; j++)
            {
                ca[j] = ia[j] + '0';
            }
            printf("%s\n", ca);
            i--;
        }
        else
        {
            ia[i]++;
            if (ia[i] == 10)
            {
                ia[i] = 0;
                i--;
            }
            else
            {
                i++;
            }
        }
    }

Pseudo-Funktion b:
C:
    for (i = 0; i != -1;)
    {
        if (i == 3)
        {
            for (j = 0; j < 3; j++)
            {
                ca[j] = ia[j] + '0';
            }
            printf("%s\n", ca);
            i--;
        }
        else
        {
            ia[i]++;
            for (j = 0; j < i;)
            {
                if (ia[j] == ia[i])
                {
                    ia[i]++;
                    j = 0;
                }
                else
                {
                    j++;
                }
            }
            if (ia[i] == 10)
            {
                ia[i] = 0;
                i--;
            }
            else
            {
                i++;
            }
        }
    }

Das ganze ist auch leicht anpassbar. Ich entschuldige mich schonmal, das ist nicht die kernighan and ritchie notation(!)

Im Fall i == 3 erfolgt die Ausgabe
 
Ok, ich wusste nicht,dass es so kompliziert ist alle Zahlenkombinationen aus 9 Zahlen zu finden 🙁. Ich glaube mit meinen Kenntnissen bin ich noch nicht so weit. Ich sollte mich wann später vielleicht nochmal dieser "Aufgabe"(Die ich mir selber gestellt hatte 😛) zuwenden. Vorallem Funktionen hatte ich bisher in meinem Buch nur kurz gehabt 😱. Aber vllt. schaff ichs ja bis zum Ende meines Java-Buches die Lösung selber zu finden xD.
Danke für die Hilfen. 🙂
 
Es kann auch hochgezählt werden - und alle Zahlen mit 0en oder mit doppelten Ziffern "übersprungen" werden. Laufzeittechnisch beisst sich das nicht, da das erstellen der Zahlen hier nicht das Problem darstellt.
 

Neue Themen


Zurück
Oben