Alle Kombination von 4 int Zahlen

Demenkay

Mitglied
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

Top Contributor
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?
 

Demenkay

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

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

Top Contributor
Wer braucht schon Schleifen?

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

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

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

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

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

Java:
    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);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
 
Zuletzt bearbeitet:

Demenkay

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

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

Top Contributor
Also wirklich...

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

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

Neue Themen


Oben