Hallo, ich habe mein Programm, in denen Permutationen durchgeführt werden, abgeschlossen. Nun stehe ich vor einem Problem, nämlich probierte ich das Programm immer auf einem Windows 7 Notebook mit 8GB RAM aus. Jetzt soll dieses Programm auf einem Windows Vista Notebook mit 4GB RAM laufen. Wenn man zum Beispie eine Kombination der Größe 18 hat und man in der JComboBox 6 angibt, scheitert es an einem heap size error. Gibt es irgendwelche Möglichkeiten dies zu lösen, außer die Heap size bei Java zu erhöhen? Oder hilft hier vielleicht Multithreading?Hier mein Code:
Bei Unklarheiten nachfragen. Schonmal danke im voraus.
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
public class test extends JFrame implements ActionListener {
private JPanel panel;
private JButton ok;
private JTextArea text;
private JComboBox<Integer> drop;
private DefaultComboBoxModel<Integer> model;
private Vector<Integer> zahlen;
private String str;
private int zahlKombi;
private JScrollPane scroll;
public test() {
panel = new JPanel();
drop = new JComboBox<Integer>();
ok = new JButton("OK");
ok.addActionListener(this);
str = ("1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, ");
text = new JTextArea(str, 16, 16);
text.setEditable(true);
scroll = new JScrollPane(text);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
zahlen = new Vector<Integer>();
int i = 0;
for (i=3; i<11; i++) {
zahlen.add(i); }
model = new DefaultComboBoxModel<Integer>(zahlen);
drop.setModel(model);
panel.add(scroll);
panel.add(ok);
panel.add(drop);
add(panel);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new test();
}
//-----------------------------------------------------------------------------------
public void permute(java.util.List<Integer> intList, int k, int max) {
if(k == max) {
text.append(Arrays.toString(intList.subList(0, max).toArray()).replaceAll( "\\[|\\]", "") + ", \n");
} else {
for(int i = k; i < intList.size(); i++){
java.util.Collections.swap(intList, i, k);
permute(intList, k+1, max);
java.util.Collections.swap(intList, k, i);
}
}
}
//-----------------------------------------------------------------------------------
@Override
public void actionPerformed(ActionEvent arg0) {
zahlKombi = (int)drop.getSelectedItem();
String a = text.getText();
text.setText("");
String[] zahlenstring = a.split(", ");
int[] zahlenint = new int[zahlenstring.length];
for(int i = 0; i < zahlenstring.length ;i++) {
zahlenint[i] = Integer.parseInt(zahlenstring[i]); }
ArrayList<Integer> intList = new ArrayList<Integer>();
for (int i = 0; i < zahlenint.length; i++) {
intList.add(zahlenint[i]); }
permute(intList, 0, zahlKombi);
}
}
Bei Unklarheiten nachfragen. Schonmal danke im voraus.
Zuletzt bearbeitet von einem Moderator: