# Alle Zahlenkombinationen aus 9 zahlen finden



## DaCrazyJavaExpert (16. Jun 2017)

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... :

```
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!


----------



## Meeresgott (16. Jun 2017)

Hallo, 

warum zählst du nicht einfach von 0 - 999999999 ? Das wären deine Zahlenkombinationen  

LG


----------



## Robat (16. Jun 2017)

DaCrazyJavaExpert hat gesagt.:


> 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


----------



## DaCrazyJavaExpert (16. Jun 2017)

Robat hat gesagt.:


> 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


----------



## Wurstkopp (16. Jun 2017)

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.


----------



## JStein52 (17. Jun 2017)

Meeresgott hat gesagt.:


> warum zählst du nicht einfach von 0 - 999999999


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


----------



## JCODA (17. Jun 2017)

Wurstkopp hat gesagt.:


> 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.





JStein52 hat gesagt.:


> 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.


----------



## Xyz1 (17. Jun 2017)

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.


----------



## JStein52 (17. Jun 2017)

DerWissende hat gesagt.:


> Gern kann ich den Code offenlegen


Das ist ja der Sinn der Frage. Er wollte ja nicht wissen ob du eine .exe hast die das tut was er möchte sondern wie er das machen kann


----------



## Xyz1 (17. Jun 2017)

JStein52 hat gesagt.:


> Das ist ja der Sinn der Frage


Nagut, aber nur, weil du es bist ....

Pseudo-Funktion a:

```
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:

```
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


----------



## JStein52 (17. Jun 2017)

DerWissende hat gesagt.:


> Nagut, aber nur, weil du es bist


 danke


----------



## DaCrazyJavaExpert (17. Jun 2017)

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.


----------



## TheFrog (17. Jun 2017)

9!


----------



## mrBrown (18. Jun 2017)

TheFrog hat gesagt.:


> 9!


42.


----------



## Meeresgott (19. Jun 2017)

JStein52 hat gesagt.:


> 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



Hast du Recht, habe zu schnell geantwortet, ich dachte er möchte alle Zahlen von 0-999999999 und nicht die Permutationen


----------



## Xyz1 (19. Jun 2017)

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.


----------



## Meeresgott (19. Jun 2017)

DerWissende hat gesagt.:


> Es kann auch hochgezählt werden



Ja klar aber das bloße Zählen, dass ich eigentlich meinte, dass wäre ja nur der erste Schritt


----------



## Xyz1 (19. Jun 2017)

Meeresgott hat gesagt.:


> dass wäre ja nur der erste Schritt


Was?

2369!


----------

