# Alle möglichen Kombinationen von mehreren Objekten berechnen



## motschow (25. Mrz 2006)

Hallo Community,
ich habe mehrere Objekte in einem Array und muss nun alle möglichen Kombinationen von denen berechnen.
Weiß jemand wie man sowas macht?
z.b.
[o1,o2,o3,o4,o5]
->[o2,o1,o3,o4,o5]
->[o3,o1,o2,o4,o5}
   .
   .
   .

Grüße, motschow


----------



## byte (25. Mrz 2006)

Sowas in der Art?


```
Object[] arr;
...
for(int i=0; i<arr.length; i++) {
  for(int j=1; j<arr.length; j++) {
    for(int k=2; k<arr.length; k++) {
      for(int l=3; l<arr.length; l++) {
        System.out.println(arr[i] + " " + arr[j] + " " + arr[k] + " " + arr[l]);
      }
    }
  }
}
```

(ungetestet)


----------



## motschow (25. Mrz 2006)

es dürfen ja nie zei ahlen gleich sein; bei dir kann auc *2,2,*5,4 rauskommen


----------



## motschow (25. Mrz 2006)

aber mit nem Set gings vielleicht....


----------



## SlaterB (26. Mrz 2006)

ein Denkanstoß:


```
public class Test {

	private static Object[] o = {"0","1","2","3","4"};
	private static int l = o.length;
	
	
	public static void rek(int tiefe) {
		if (tiefe > l) {
			return;
		} else if (tiefe == l) {
			ausgabe();
		}
		
		// aktuelles Feld so lassen wie es ist und weitere Felder bearbeiten
		rek(tiefe+1); 
		
		for (int i=tiefe+1; i<l; i++) {
			// aktuelles Feld mit einem der hinteren vertauschen 
			tausche(tiefe,i);
			rek(tiefe+1);
			// danach zurücktauschen
			tausche(tiefe,i);
		}
	}
	
	private static void tausche(int i, int j) {
		Object swap = o[i];
		o[i] = o[j];
		o[j] = swap;		
	}
	
	private static void ausgabe() {
		for (int i=0; i<l; i++) {
			System.out.print(o[i]);
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		rek(0);
		
	}
}
```


----------



## motschow (26. Mrz 2006)

danke für deinen Code, slaterB.
aber eine frage hätt ich noch:
die Methode rek ruft sich selbt immer wieder auf, bis die variable tiefe so groß is wie die Länge vin dem array o.
dann wird ausgabe() aufgerufen. So is des zumindest i meim Debugger gewesen.
ABER: die Methode ausgabe() steht in einer if-Bedingung und sollte gemäß kopf nur dann aufgerufen werden, wenn 
tiefe == 1 ist. Warum wird sie aber erst aufgerufen, wenn tiefe== Arraylange is?

 ???:L


----------



## motschow (26. Mrz 2006)

AAAHHH!! Ich vollidiot! Hab ie 1 mit dem l verwechselt. Sorry


----------

