Hallo!
Ich habe versucht, eine Klasse zu schreiben, welche mir alle möglichen Kombinationen eines beliebigen Arrays zurückgibt, jeweils eins mit Hilfe von getNext().
Um mir das Casten zu sparen wollte ich es generisch lösen, und hatte dabei einen Constructur von Combination<Type>(length, Type[] objects_to_combine) im Sinn. Dabei soll objects_to_combine ein Array mit allen zur Verfügung stehenden Objekten sein, length die Länge, auf wieviel Plätze die Objekte aufgeteilt werden dürfen. Deshalb muss ein Array Type[] t = new Type[length] zurückgegeben werden - nur kann man ein generischen Typen nicht instanzieren. Ich habe es also gelöst, indem ein solcher Container bereits übergeben werden muss. Gibt es eine Möglichkeit, das ganze generisch mit meinem gewünschten Constructor zu realiseren?
Danke!
Ich habe versucht, eine Klasse zu schreiben, welche mir alle möglichen Kombinationen eines beliebigen Arrays zurückgibt, jeweils eins mit Hilfe von getNext().
Um mir das Casten zu sparen wollte ich es generisch lösen, und hatte dabei einen Constructur von Combination<Type>(length, Type[] objects_to_combine) im Sinn. Dabei soll objects_to_combine ein Array mit allen zur Verfügung stehenden Objekten sein, length die Länge, auf wieviel Plätze die Objekte aufgeteilt werden dürfen. Deshalb muss ein Array Type[] t = new Type[length] zurückgegeben werden - nur kann man ein generischen Typen nicht instanzieren. Ich habe es also gelöst, indem ein solcher Container bereits übergeben werden muss. Gibt es eine Möglichkeit, das ganze generisch mit meinem gewünschten Constructor zu realiseren?
Danke!
Code:
public class Combination<T>{
private int comb[], length, different_numbers;
private T[] objects_to_combine, container;
public Combination(T[] objects_to_combine, T[] container) {
if (container.length==0)
throw new IllegalArgumentException("Containerlänge darf nicht 0 sein");
this.objects_to_combine=objects_to_combine;
this.container=container;
this.different_numbers=objects_to_combine.length;
this.length=container.length;
reset();
}
private void increase(int i){
if (comb[i]==different_numbers-1){//wenn i höchste Zahl
comb[i]=0;
if (i-1>=0)
increase(i-1);
} else
comb[i]++;
}
public T[] getNext(){
increase(length-1);
for (int i=0; i<length;i++)
container[i]=objects_to_combine[comb[i]];
return container;
}
public boolean hasNext(){
for (int i=0; i<comb.length; i++)
if (different_numbers-1!=comb[i])
return true;
return false;
}
public void reset(){
comb=new int[length];
comb[length-1]=-1;
}
public static void main(String[] argv){
String[] string ={
new String("K"),
new String("R"),
new String("H"),
};
Combination<String> comb = new Combination<String>(string,new String[2]);
while (comb.hasNext()){
String[] j = comb.getNext();
for (int i=0; i<j.length;i++){
System.out.print(j[i]+"\t");
}
System.out.print("\n");
}
}
}