Hallo java-forum,
ich habe ein kleines Programm geschrieben, dass mir alle möglichen Permutationen einer Liste von Strings erzeugt, wenn ein neuer Buchstabe hinzukommt.
Nach dem ersten Aufruf, sollte die Liste also folgende Einträge haben [01,10]. Nach dem zweiten Aufruf [201, 021, 012, 210, 120, 102].
Die Anzahl der Permutationen wächst in diesem Fall mit der Fakultät, d.h. nach dem letzten Aufruf sollte eine Liste mit 10!=3628800 Einträgen zurückgegeben werden. Genau bei diesem Durchgang erhalte ich aber folgenden Fehler:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:215)
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at euler.HelpClass.permutate(HelpClass.java:46)
Der Fehler tritt also auf, wenn der String s2 aus den beiden substrings und dem char zusammengesetzt wird.
Benutze NetBeans 7.0.1 unter Mac OSX 10.6.8.
Erfolglose Versuche den Fehler zu beseitigen:
- Einsatz des Garbage Collector
- String s2 in jedem Durchlauf für j neu anlegen
- Vergrößerung der Heap Size in /Applications/NetBeans/NetBeans 7.0.app/Contents/Resources/NetBeans/bin/netbeans
Hat jemand von euch eine Idee was ich noch machen könnte? Langsam bin ich mit meinem Latein am Ende...
Schöne Grüße
torben
ich habe ein kleines Programm geschrieben, dass mir alle möglichen Permutationen einer Liste von Strings erzeugt, wenn ein neuer Buchstabe hinzukommt.
Java:
LinkedList<String> pl =new LinkedList<String>();
pl.add("0");
pl=HelpClass.permutate(pl, '1');
pl=HelpClass.permutate(pl, '2');
pl=HelpClass.permutate(pl, '3');
pl=HelpClass.permutate(pl, '4');
pl=HelpClass.permutate(pl, '5');
pl=HelpClass.permutate(pl, '6');
pl=HelpClass.permutate(pl, '7');
pl=HelpClass.permutate(pl, '8');
pl=HelpClass.permutate(pl, '9');
Nach dem ersten Aufruf, sollte die Liste also folgende Einträge haben [01,10]. Nach dem zweiten Aufruf [201, 021, 012, 210, 120, 102].
Java:
public static LinkedList<String> permutate (LinkedList<String> ref, char x){
LinkedList<String> neu = new LinkedList<String>();
int i, j,c=0;
String s,s2;
for (i=0; i<ref.size(); i++){
s=ref.get(i);
for (j=0; j<=s.length(); j++){
if (j==0)
s2=x+s;
else{
s2=s.substring(0,j)+x+s.substring(j);
}
c++;
neu.add(s2);
}
}
System.out.println("c= "+c);
return neu;
}
Die Anzahl der Permutationen wächst in diesem Fall mit der Fakultät, d.h. nach dem letzten Aufruf sollte eine Liste mit 10!=3628800 Einträgen zurückgegeben werden. Genau bei diesem Durchgang erhalte ich aber folgenden Fehler:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:215)
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at euler.HelpClass.permutate(HelpClass.java:46)
Der Fehler tritt also auf, wenn der String s2 aus den beiden substrings und dem char zusammengesetzt wird.
Benutze NetBeans 7.0.1 unter Mac OSX 10.6.8.
Erfolglose Versuche den Fehler zu beseitigen:
- Einsatz des Garbage Collector
- String s2 in jedem Durchlauf für j neu anlegen
- Vergrößerung der Heap Size in /Applications/NetBeans/NetBeans 7.0.app/Contents/Resources/NetBeans/bin/netbeans
Hat jemand von euch eine Idee was ich noch machen könnte? Langsam bin ich mit meinem Latein am Ende...
Schöne Grüße
torben