Übungsbeispiel: Logikfehler mit Switch-Verzweigung!?

Mik3e

Erfahrenes Mitglied
Hi!

Habe mir zu Lernzwecken ein einfaches Übungsbeispiel ausgedacht, dass Arabische in Römische Zahlen umsetzen soll.

Das Teil sieht so aus:
PHP:
public class Zahlen {
	public static void main (String[] args) {
		Arabischezahl meinezahl1 = new Arabischezahl(1);
		Arabischezahl meinezahl2 = new Arabischezahl(3);
		meinezahl1.setRoemZahlForArabZahl();
		meinezahl2.setRoemZahlForArabZahl();
		System.out.println(meinezahl1.getRoemZahl());
		System.out.println(meinezahl2.getRoemZahl());
	}
}

class Arabischezahl {
	private int arab_zahl;
	private String roem_zahl;
	
	/* Konstruktor */
	Arabischezahl (int arab_zahl) {
		this.arab_zahl=arab_zahl;
	}
	
	/* Translation */
	public void setRoemZahlForArabZahl(){
		System.out.println(this.arab_zahl);
		switch (this.arab_zahl) {
			case 1: this.roem_zahl="I";
			case 2: this.roem_zahl="II";
			case 3: this.roem_zahl="III";
			case 4: this.roem_zahl="IV";
			case 5: this.roem_zahl="V";
			default: this.roem_zahl="Zahl nicht gefunden";
		}
	}
	
	/* Liefern der Römischen Zahl (Beispiel für Kapselung) */
	public String getRoemZahl(){
		return this.roem_zahl;
	}
}
Eigentlich eine banale Sache, allerdings liefert mit das Teil als Output:
1
3
Zahl nicht gefunden
Zahl nicht gefunden


Korrekt wäre aber:
1
3
I
III


In der Switch-Verzweigung erkennt er den INT Wert beim Case offensichtlich nicht (springt immer zum Default Marker). Habe ich hier ein Problem mit den Datentypen? (Obwohl dann müsste der Compiler ja meckern..)
 
Hallo,

du hast nur eine Kleinigkeit vergessen:
Code:
	/* Translation */
   	public void setRoemZahlForArabZahl(){
   		System.out.println(this.arab_zahl);
   		switch (this.arab_zahl) {
   			case 1: this.roem_zahl="I";
   					break;
   			case 2: this.roem_zahl="II";
   					break;
   			case 3: this.roem_zahl="III";
   					break;
   			case 4: this.roem_zahl="IV";
   					break;
   			case 5: this.roem_zahl="V";
   					break;
   			default: this.roem_zahl="Zahl nicht gefunden";
   		}
   	}
Da du Eclipse benutzt, hättest du auch mal den Debugger benutzten können, dann wäre es dir wahrscheinlich aufgefallen.;)
 
Die break Anweisung kann aber nicht der Grund sein (wie bereits angeführt). Da laut Doku break optional ist. Und default wird nur angesprochen, wenn es KEINE Übereinstimmung mit einem der möglichen Cases gibt...

Also entweder ist meine Doku falsch, oder der Fehler liegt anderswo..

Danke jedenfalls & LG
Mike
 
Hallo,

doch die break Anweisung ist aber der Grund. Setzte mal einen Breakpoint:-) und debug dann mal schrittweise weiter.
 
Spannende Sache eigentlich... Hab mir jetzt zwei Dokus vorgenommen, und in beiden ist break optional angeführt... :-)
 
stimmt.. der Satz ist dabei entscheiden:
"...so wird an die entsprechende Marke gesprungen, und alle restlichen Anweisungen der switch-Anweisung werden ausgeführt."

Auch eine interessante Sache (ist mir so noch nie untergekommen). Ist eigentlich eine unlogische Vorgehensweise.

Denn nur weil das Program 3==3 erkennt, darf es doch eigentlich noch lange nicht (danach) auf 4==3 und 5=3 erkennen...

Ist mir unverständlich aber soll so sein.
 
Zurück