S
Skara
Gast
Hallo,
Ich habe ein für mich als Java-Anfänger merkwürdiges Problem:
Meine Aufgabe ist es, eine Klasse
so zu schreiben, dass alle Permutationen als Liste in einer LinkedList ausgeben werden. Dabei werden die Elemente mit "values" übergeben.
Im Prinzip könnte das alles ganz gut funktioren, aber aus irgendeinem Grund werden nach Zeile 20, wo die Elemente getauscht werden, alle Listenelemente aus "result" zu dem aktuellen "values"-Element umgewandelt. Das soll heißen, dass wenn zum Beispiel als erstes [1,2,3] zu "result" hinzugefügt wurde und gerade "values" zu [2,1,3] vertauscht wurde, plötzlich auch alle Elemente aus "result" zu [2,1,3] werden. Das geht die ganze Zeit bis zum Ende der Funktion so weiter bis am Ende so etwas rauskommt wie
.
Gebe ich die Zwischenergebne allerdings direkt per print aus kann ich die richtigen Permutationen auslesen.
Warhscheinlich ist es recht schwer nachzuvollziehen, was mein Quelltext bedeuten soll und was ich überhaupt will, aber vielleicht hat jemand eine tolle Idee
Ich habe ein für mich als Java-Anfänger merkwürdiges Problem:
Meine Aufgabe ist es, eine Klasse
Code:
public static <T> List<LinkedList<T>> perm(List<T> values) {...
Im Prinzip könnte das alles ganz gut funktioren, aber aus irgendeinem Grund werden nach Zeile 20, wo die Elemente getauscht werden, alle Listenelemente aus "result" zu dem aktuellen "values"-Element umgewandelt. Das soll heißen, dass wenn zum Beispiel als erstes [1,2,3] zu "result" hinzugefügt wurde und gerade "values" zu [2,1,3] vertauscht wurde, plötzlich auch alle Elemente aus "result" zu [2,1,3] werden. Das geht die ganze Zeit bis zum Ende der Funktion so weiter bis am Ende so etwas rauskommt wie
Code:
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
Gebe ich die Zwischenergebne allerdings direkt per print aus kann ich die richtigen Permutationen auslesen.
Warhscheinlich ist es recht schwer nachzuvollziehen, was mein Quelltext bedeuten soll und was ich überhaupt will, aber vielleicht hat jemand eine tolle Idee
Java:
import java.util.*;
public class permutations {
public static <T> List<LinkedList<T>> perm(List<T> values) {
int count;
List<LinkedList<T>> result = new LinkedList<LinkedList<T>>();
if (values.size()==0) return result;
count = values.size()-1;
return permhilf(values, count, result) ;
}
public static <T> List<LinkedList<T>> permhilf(List<T> values, int count, List<LinkedList<T>> result) {
if (count==0){
result.add(0, (LinkedList<T>) values);
} else
{
permhilf(values, count-1, result);
for (int i=0; i<=count-1; i++){
swap(values, i, count);
permhilf(values, count-1,result);
swap(values, i, count);
}
}
return result;
}
static <T> void swap(List<T> values, int i, int j) {
T temp = values.get(i);
values.set(i,(values.get(j)));
values.set(j,temp);
}
public static void main (String [] args) {
List<Integer> test = new LinkedList<Integer>();
test.add(1);
test.add(2);
test.add(3);
System.out.println(perm(test));
}
}