# Alle Kombination von 4 int Zahlen



## Demenkay (6. Nov 2011)

Hallo,

ich muss eine Kombination von 4 int Zahlen 1, 2, 3, 4 schreiben.
Und zwar so, dass es nur 4er Kombinationen anzeigt und dass alle 26 Kombinationen vorhanden sind. Es dürfen allerdings keine Arrays im Code vorhanden sein.
Danach soll eine Liste ausgegeben werden die alle 26 Varianten zeigt.
Das Gerüst habe ich schon, allerdings habe ich keine Ahnung, wie ich die Kombinationen hinbekommen soll, sortieren wäre ja kein Problem gewesen.
Kann mir vielleicht jemand helfen?


----------



## nrg (6. Nov 2011)

dein zeig doch mal dein gerüst. ich nehme mal an, dass die Ausgabe direkt erfolgt, weil "Listen" zum merken aller Kombinationen werden wohl auch nicht erlaubt sein, wenn du keine Arrays verwenden darfst, oder?


----------



## Landei (6. Nov 2011)

Falls du Permutationen meinst, sollten es 4! = 24 sein.


----------



## Marco13 (6. Nov 2011)

Hier sollte was dabei sein http://www.java-forum.org/codeschnipsel-u-projekte/81973-combinatorics.html#post646341


----------



## Demenkay (6. Nov 2011)

Sorry, ja es waren 24 statt 26. Und ja, die Ausgabe sollte direkt erfolgen. Naja Gerüst ist wohl ein bisschen zuviel gesagt:
Es soll wie folg ausgeben: Schlüssel-Nr. x: a, b, c, d

Dafür ist es recht wenig ich weiß! Aber ich muss sagen ich hab im Moment keinen blassen Schimmer wie ich das hinbekommen soll...


```
public class Aufgabe1 {

	public static void main(String[] args) {
		int x = 1;
		int a = 1; 
		int b = 2; 
		int c = 3; 
		int d = 4;

			for (x = 1; x <= 24; x++)
				System.out.println("Schlüssel-Nr. " + x + ": " +a+ ", "+b+ ", "+c+ ", "+d);


	}
}
```


----------



## Landei (6. Nov 2011)

Wer braucht schon Schleifen?


```
public class Perm {
    public static void perm(int a, int b, int c, int d) {
        per(a,b,c,d);
        per(b,a,c,d);
        per(c,a,b,d);
        per(d,a,b,c);
    }
    
    public static void per(int a, int b, int c, int d) {
        pe(a,b,c,d);
        pe(a,c,b,d);
        pe(a,d,b,c);
    }
    public static void pe(int a, int b, int c, int d) {
        System.out.println("" + a + b + c + d);
        System.out.println("" + a + b + d + c);
    }

    public static void main(String[] args) {
        perm(1,2,3,4);
    }
 }
```


----------



## Demenkay (6. Nov 2011)

Okay, aber verstehen kann ich es immernoch nicht....


```
public static void per(int a, int b, int c, int d) {
        pe(a,b,c,d);
        pe(a,c,b,d);
        pe(a,d,b,c);
```

Fehlt hier per(a,c,d,b);  und per (a,b,d,c); nicht noch??

Würde ich es mit ner Schleife überhaupt hinbekommen?


----------



## Landei (6. Nov 2011)

Funktioniert der Code? Dann fehlt auch nichts 

Der Code ist nicht ganz ernst gemeint, eher als ein kleines Puzzle. perm permutiert alle 4 Zahlen. per lässt die erste Zahl fest und permutiert die letzten drei Zahlen. pe lässt die ersten zwei Zahlen fest und permutiert die beiden letzten. Die Funktion p habe ich mir geschenkt und die Ausgabe gleich in pe erledigt.

Natürlich geht es auch mit einer oder mehreren Schleifen.


```
public class Perm {

    public static void perm(int a, int b, int c, int d) {
        for(int i = 0; i < 4; i++) {
            for(int j = 0; j < 4; j++) {
                if(j != i) {
                    for(int k = 0; k < 4; k++) {
                        if (k != i && k != j) {
                            for(int l = 0; l < 4; l++) {
                                if (l != i && l != j && l != k) {
                                    System.out.print(get(i,a,b,c,d));
                                    System.out.print(get(j,a,b,c,d));
                                    System.out.print(get(k,a,b,c,d));
                                    System.out.println(get(l,a,b,c,d));
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    private static int get(int n, int a, int b, int c, int d) {
        switch(n) {
            case 0 : return a;
            case 1 : return b;
            case 2 : return c;
            case 3 : return d;
            default : throw new IllegalArgumentException();    
        }
    }

    public static void main(String[] args) {
        perm(1,2,3,4);
    }
 
}
```

Braucht man das nicht für beliebige Zahlen, sondern nur für 1,2,3,4, kann man das kürzen zu:


```
public static void perm() {
        for(int i = 1; i <= 4; i++) {
            for(int j = 1; j <= 4; j++) {
                if(j != i) {
                    for(int k = 1; k <= 4; k++) {
                        if (k != i && k != j) {
                            for(int l = 1; l <= 4; l++) {
                                if (l != i && l != j && l != k) {
                                    System.out.println("" + i + j + k + l);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
```


----------



## Demenkay (7. Nov 2011)

Okay, vielen Dank!! Aber wie bekomme ich nun die fortlaufende Nummer noch VOR die Zahlen??
Also for Schleife funktioniert das ganze auch nicht...


```
public class Aufgabe1{
	

	public static void main(String[] args) {
		for (int a = 1; a <= 4; a++) {
			for (int b = 1; b <= 4; b++) {
				if (b != a) {
					for (int c = 1; c <= 4; c++) {
						if (c != a && c != b) {
							for (int d = 1; d <= 4; d++) {
								if (d != a && d != b && d != c) {
									System.out.println("" + a + b + c + d);
								}
							}
						}
					}
				}
			}
		}
	}

}
```


----------



## Landei (7. Nov 2011)

Also wirklich...


```
public static void main(String[] args) {
        int nr = 1;
        for (int a = 1; a <= 4; a++) {
            for (int b = 1; b <= 4; b++) {
                if (b != a) {
                    for (int c = 1; c <= 4; c++) {
                        if (c != a && c != b) {
                            for (int d = 1; d <= 4; d++) {
                                if (d != a && d != b && d != c) {
                                    System.out.println("Nr." + (nr++) + ": " + a + b + c + d);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
```


----------



## Demenkay (7. Nov 2011)

Ahhh... verdammt!!! Ich wusste nicht dass ich (nr++) schreiben darf IM System.out.println....
Hab mir den halben Nachmittag damit totgeschlagen und nun sowas....


----------

