Dezimal nach Hexadezimal rechner wirft seltsame exception

KilledByCheese

Mitglied
Hallo, ich habe im Rahmen meiner ausbildung ein paar einfache Java aufgaben bekommen bzw. ich übe damit, um meine kenntnisse zu verbessern
Das programm welches ich geschrieben habe funktionert, es macht die richtige konsolenausgabe, aber trotzdem wird eine seltsame exception vom stack geworfen hat irgendeiner eine idee warum?

Java:
import java.util.*;

public class DezimalNachHexadezimal {
    public static void main(String[] args) {
        System.out.println("Gib eine Dezimalzahl ein: ");
        Scanner zahlInput = new Scanner(System.in);
     
        String zahlString = zahlInput.nextLine();
        double zahl = Double.parseDouble(zahlString);
        boolean weiterTeilen=true;
        Stack zahlStapel = new Stack();
        do{
            double tempZahl;
            tempZahl = zahl/16;
            String tempZahlString = Double.toString(tempZahl);
            int komma = tempZahlString.indexOf(".");
            String substringWeiterteilen = tempZahlString.substring(0,komma);
            String substringRest = tempZahlString.substring(komma+1);
          
            String andenRestDran = "0.";
            String rest = andenRestDran.concat(substringRest);
          
            double restZahl = (Double.parseDouble(rest)) * 16;
            int restZahlForSwitch = (int) restZahl;
            zahl = Double.parseDouble(substringWeiterteilen);
            switch(restZahlForSwitch)
            {
                case 0 : weiterTeilen = false;  
                break;             
                case 1 : zahlStapel.addElement("1");
                break;             
                case 2 : zahlStapel.addElement("2");
                break;             
                case 3 : zahlStapel.addElement("3");
                break;             
                case 4 : zahlStapel.addElement("4");
                break;             
                case 5 : zahlStapel.addElement("5");
                break;             
                case 6 : zahlStapel.addElement("6");
                break;             
                case 7 : zahlStapel.addElement("7");
                break;             
                case 8 : zahlStapel.addElement("8");
                break;             
                case 9 : zahlStapel.addElement("9");
                break;             
                case 10 : zahlStapel.addElement("a");
                break;             
                case 11 : zahlStapel.addElement("b");
                break;             
                case 12 : zahlStapel.addElement("c");
                break;             
                case 13 : zahlStapel.addElement("d");
                break;             
                case 14 : zahlStapel.addElement("e");
                break;             
                case 15 : zahlStapel.addElement("f");
                break;  
            }
        }while(weiterTeilen==true);
        int laenge= zahlString.length();
        for(int i = 0; i<laenge;i++)
        {
            System.out.print(zahlStapel.pop() );
        }
        zahlInput.close();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
du solltest schon sagen was für eine exception geworfen wird und wo

Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at java.util.Stack.pop(Stack.java:84)
at DezimalNachHexadezimal.main(DezimalNachHexadezimal.java:107)

das ist die exception ich kann damit nichts anfangen, sie kommt entweder hinter dem ergebnis, welches richtig berechnet wird, oder mitten im ergebnis
 
du entfernst nunmal mehr dinge vom Stack als du drauf gelegt hast.
Java:
int laenge= zahlString.length();
      
        for(int i = 0; i<laenge;i++)
        {
            System.out.print(zahlStapel.pop() );
        }
Wenn zahlString z.B. 255 ist, dann der hexadezimal wert davon FF
Nun ist demnach laenge=3 und du hast somit auch 3 Schleifendurchläufe. Aber da du nunmal nur zwei Werte auf dem Stack hast gibt es nen Fehler.
 
du entfernst nunmal mehr dinge vom Stack als du drauf gelegt hast.


Wenn zahlString z.B. 255 ist, dann der hexadezimal wert davon FF
Nun ist demnach laenge=3 und du hast somit auch 3 Schleifendurchläufe. Aber da du nunmal nur zwei Werte auf dem Stack hast gibt es nen Fehler.

super vielen dank ich berechne nun die laenge mit .size() vom stapel jetzt klappt es ohne fehler, vielen dank hast mir echt geholfen
 

Zurück
Oben