OutOfMemory Error bei Zahlenkonvertierungsprogramm

ghost_hacker

Mitglied
Hi Leute!

Ich schreibe im Moment ein Programm, das Zahlen aus dem Dezimalsystem in ein beliebiges Zahlensystem umwandeln kann.

Eine erste Version von mir sieht so aus:

Java:
import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;

public class numberconvert extends Applet
implements ActionListener

{
	Stack <Integer> results = new Stack <Integer>();
	private TextField eingabe;
	private TextField basis;
	private Label ausgabe;
	private Button berechnen;
	private String ergebnis;
	private int divident;
	private int base;
	
	public void init()
	{
		eingabe = new TextField(13);
		add(eingabe);
		eingabe.addActionListener(this);
		
		basis = new TextField(13);
		add(basis);
		basis.addActionListener(this);
		
		berechnen = new Button("Berechnen");
		add(berechnen);
		berechnen.addActionListener(this);
		
		ausgabe = new Label("Bitte Werte eingeben");
		add(ausgabe);
	}
	
	public void actionPerformed(ActionEvent event)
	{
		if(event.getSource() == berechnen)
		{
			divident = Integer.parseInt(eingabe.getText());
			base = Integer.parseInt(basis.getText());
			
			while(divident != 0)
			{
				int i = divident % base;
				results.push(new Integer(i));
			}
			
			while(!results.empty())
			{
				int temp = (Integer) (results.pop());
				ergebnis = temp+ergebnis;	
			}
			
			ausgabe.setText(ergebnis);			
		}
	}
}


Dort kriege ich nach Eingabe der Daten allerdings folgenden Fehler:

Java:
Exception in thread "AWT-EventQueue-1" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2760)
	at java.util.Arrays.copyOf(Arrays.java:2734)
	at java.util.Vector.ensureCapacityHelper(Vector.java:226)
	at java.util.Vector.addElement(Vector.java:573)
	at java.util.Stack.push(Stack.java:50)
	at numberconvert.actionPerformed(numberconvert.java:47)
	at java.awt.Button.processActionEvent(Button.java:392)
	at java.awt.Button.processEvent(Button.java:360)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exit code: 0
No Errors

Könnte mir da evtl. jemand bei helfen?

MfG ghost_hacker
 
Zuletzt bearbeitet:
In der Schleife ab Zeile 44 veränderst du
Code:
divident
gar nicht. Also ist das entweder eine Schleife die nicht betreten wird oder eine Endlosschleife, die solange Zahlen reinpusht, bis der Speicher voll ist.
 
Java:
while(divident != 0)
            {
                int i = divident % base;
                results.push(new Integer(i));
            }

Der divident wird nicht verändert. Der Stack wächst und wächst und wächst.
 
Java:
            divident = Integer.parseInt(eingabe.getText());
            base = Integer.parseInt(basis.getText());
            
            while(divident != 0)
            {
                int i = divident % base;
                results.push(new Integer(i));
            }

das ist eine endlosschleife

edit: scheint bei mehreren heute tote hose in der arbeit zu sein, hm? :lol:
 
und die Fehlermeldung weist so schön drauf hin,
ist es undenkbar, zur Überprüfung etwa
System.out.println("bei diesem Schleifendurchlauf ist divident = ..");
hineinzuschreiben und an den tausenden gleichen Ausgaben etwas zu erkennen?

Applet ist vielleicht schlecht zu System.out.println oder Debugger, aber das ist selbstgewählte Einschränkung 😉
 

Neue Themen


Zurück
Oben