Integer erhöht sich nicht!

ZypriZ

Mitglied
Hallo Leute suche schon gefühlte 10 Stunden an dem Fehler. Mein Problem ist, dass sich die Variable dezimalWert nicht erhöht vllt. wisst ihr was los ist:

Java:
package römischezahlen;

public class RömischeZahlen {

    private String roemWert;
    private int dezimalWert;

    public void eingabe() {
        roemWert = javax.swing.JOptionPane.showInputDialog("Bitte eine 3-stellige Römische Zahl eingeben:");
    }

    public void berechnen() {
        byte dings = 0;
        char ziffer1, ziffer2, ziffer3;
        ziffer1 = (char) roemWert.charAt(0);
        ziffer2 = (char) roemWert.charAt(1);
        ziffer3 = (char) roemWert.charAt(2);
 
        switch (dings) {
            case 1:
                if (ziffer1 == 'I') {
                    dezimalWert = dezimalWert + 1;
                } else if (ziffer1 == 'V') {
                    dezimalWert = dezimalWert + 5;
                } else if (ziffer1 == 'X') {
                    dezimalWert = dezimalWert + 10;
                } else if (ziffer1 == 'L') {
                    dezimalWert = dezimalWert + 50;
                } else if (ziffer1 == 'C') {
                    dezimalWert = dezimalWert + 100;
                } else if (ziffer1 == 'D') {
                    dezimalWert = dezimalWert + 500;
                } else if (ziffer1 == 'M') {
                    dezimalWert = dezimalWert + 1000;
                }
                break;

            case 2:
                if (ziffer2 == 'I') {
                    dezimalWert = dezimalWert + 1;
                } else if (ziffer2 == 'V') {
                    dezimalWert = dezimalWert + 5;
                } else if (ziffer2 == 'X') {
                    dezimalWert = dezimalWert + 10;
                } else if (ziffer2 == 'L') {
                    dezimalWert = dezimalWert + 50;
                } else if (ziffer2 == 'C') {
                    dezimalWert = dezimalWert + 100;
                } else if (ziffer2 == 'D') {
                    dezimalWert = dezimalWert + 500;
                } else if (ziffer2 == 'M') {
                    dezimalWert = dezimalWert + 1000;
                }
                break;

            case 3:
                if (ziffer3 == 'I') {
                    dezimalWert = dezimalWert + 1;
                } else if (ziffer3 == 'V') {
                    dezimalWert = dezimalWert + 5;
                } else if (ziffer3 == 'X') {
                    dezimalWert = dezimalWert + 10;
                } else if (ziffer3 == 'L') {
                    dezimalWert = dezimalWert + 50;
                } else if (ziffer3 == 'C') {
                    dezimalWert = dezimalWert + 100;
                } else if (ziffer3 == 'D') {
                    dezimalWert = dezimalWert + 500;
                } else if (ziffer3 == 'M') {
                    dezimalWert = dezimalWert + 1000;
                }
                break;

            default:
                System.out.println("ERROR");
        }
    }

    public void ausgabe() {
        System.out.println(dezimalWert);
    }

    public static void main(String[] args) {
        RömischeZahlen obj = new RömischeZahlen();
        obj.eingabe();
        obj.berechnen();
        obj.ausgabe();
    }
}
 
Ich würd jetzt so auf die schnelle sagen, dass es daran liegt, dass die Variable dings auf 0 ist. Dann sollte eigentlich nur die Error Meldung kommen.
 
[JAVA=13]byte dings = 0;[/code]

So wie ich es sehe, ist dings = 0 und wird auch nicht geändert so dass beim Swich in default geprungen wird. Deshalb erhöht sich auch nichts.
 
Erstmal danke für eure schnellen Antworten.

Ich habe jetzt
Java:
dings
als Instanze Varibale gesetzt und somit
Java:
=0
weggelassen aber es tut sich immernoch nichts -.-
 
Du weißt damit doch immer noch dings keinen anderen Wert zu, wo wir denn das mal 1 2 oder 3?
 
Du weißt damit doch immer noch dings keinen anderen Wert zu, wo wir denn das mal 1 2 oder 3?

Jo das habe ich mir auch gedacht und habe dann folgendes versucht :

Java:
switch (dings) {
            case 1:
                if (ziffer1 == 'I') {
                    dezimalWert = dezimalWert + 1;
                    dings = 1;
                } else if (ziffer1 == 'V') {
                    dezimalWert = dezimalWert + 5;
                    dings = 1;
                } else if (ziffer1 == 'X') {
                    dezimalWert = dezimalWert + 10;
                    dings = 1;
                } else if (ziffer1 == 'L') {
                    dezimalWert = dezimalWert + 50;
                    dings = 1;
                } else if (ziffer1 == 'C') {
                    dezimalWert = dezimalWert + 100;
                    dings = 1;
                } else if (ziffer1 == 'D') {
                    dezimalWert = dezimalWert + 500;
                    dings = 1;
                } else if (ziffer1 == 'M') {
                    dezimalWert = dezimalWert + 1000;
                    dings = 1;
                }
                break;

            case 2:
                if (ziffer2 == 'I') {
                    dezimalWert = dezimalWert + 1;
                    dings = 2;
                } else if (ziffer2 == 'V') {
                    dezimalWert = dezimalWert + 5;
                    dings = 2;
                } else if (ziffer2 == 'X') {
                    dezimalWert = dezimalWert + 10;
                    dings = 2;
                } else if (ziffer2 == 'L') {
                    dezimalWert = dezimalWert + 50;
                    dings = 2;
                } else if (ziffer2 == 'C') {
                    dezimalWert = dezimalWert + 100;
                    dings = 2;
                } else if (ziffer2 == 'D') {
                    dezimalWert = dezimalWert + 500;
                    dings = 2;
                } else if (ziffer2 == 'M') {
                    dezimalWert = dezimalWert + 1000;
                    dings = 2;
                }
                break;

            case 3:
                if (ziffer3 == 'I') {
                    dezimalWert = dezimalWert + 1;
                    dings = 3;
                } else if (ziffer3 == 'V') {
                    dezimalWert = dezimalWert + 5;
                    dings = 3;
                } else if (ziffer3 == 'X') {
                    dezimalWert = dezimalWert + 10;
                    dings = 3;
                } else if (ziffer3 == 'L') {
                    dezimalWert = dezimalWert + 50;
                    dings = 3;
                } else if (ziffer3 == 'C') {
                    dezimalWert = dezimalWert + 100;
                    dings = 3;
                } else if (ziffer3 == 'D') {
                    dezimalWert = dezimalWert + 500;
                    dings = 3;
                } else if (ziffer3 == 'M') {
                    dezimalWert = dezimalWert + 1000;
                    dings = 3;
                }
                break;

            default:
                System.out.println("ERROR");
        }
    }

tut sich dennoch nichts er gibt mir weiterhin :"ERROR" aus.
 
Das macht kein Unterschied ist ja genau so wie dus davor hattest.

Mit der Nummer die in dings steht gibst du an auf welche switch Möglichkeit du zugreifst. Mit 1 auf case 1 mit 2 auf case 2 also schau dir am besten nochmal eine Anleitung zum switch statement an!
Gruß
 
@TO
hm ... verstehe zwar nicht was du da für n zirkus machst ... aber deine tonnen von if()-else könnte man super durch EIN switch() optimieren ...

wofür soll "dings" sein ... und wraum machst du DREI MAL absolut genau das selbe ? ... das ist code-duplizierung -> schlechtes design
 
So könnte es aussehen:

Java:
public class RömischeZahlen {

    private String roemWert;
    private int dezimalWert;
 
    public void eingabe() {
        roemWert = javax.swing.JOptionPane.showInputDialog(
                "Bitte eine 3-stellige Römische Zahl eingeben:");
    }
 
    public void berechnen() {
//        char dings;
        char ziffer1, ziffer2, ziffer3;
        ziffer1 = (char) roemWert.charAt(0);
        ziffer2 = (char) roemWert.charAt(1);
        ziffer3 = (char) roemWert.charAt(2);
        auswerten(ziffer1);
        auswerten(ziffer2);
        auswerten(ziffer3);
    }
 
    public void auswerten(char ziffer){
        switch (ziffer) {
            case 'I':
                dezimalWert += 1;
                break;
            case 'V':
                dezimalWert += 5;
                break;
            case 'X':
                dezimalWert += 10;
                break;
            case 'L':
                dezimalWert += 50;
                break;
            case 'C':
                dezimalWert += 100;
                break;
            case 'D':
                dezimalWert +=  500;
                break;
            case 'M':
                dezimalWert += 1000;
                break;
            default:
                System.out.println("Error");
                dezimalWert += 0;
        }
    }
    
    public void ausgabe() {
        System.out.println(dezimalWert);
    }
 
    public static void main(String[] args) {
        RömischeZahlen obj = new RömischeZahlen();
        obj.eingabe();
        obj.berechnen();
        obj.ausgabe();
    }
}

Aber ich habe deine Logik übernommen, die nicht stimmt, denn egal ob du die römischen Zahlen "IIX" oder "XII" es käme immer 12 raus, was ja beim ersten nicht stimmt.
 

Neue Themen


Zurück
Oben