Die Umwandlung von Römisch -> Dezimal wurde erweitert
parent
faa8e897c0
commit
974f0e38ff
|
@ -4,47 +4,99 @@ import java.util.Scanner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Hanin Aljalab
|
* @author Hanin Aljalab
|
||||||
* Anmerkung: in dieser Version findet nur die Umwandlung von
|
* Anmerkung: Diese Version unterstützt nun sowohl die Umwandlung
|
||||||
* Dezimal zu Römisch statt.
|
* von Dezimal zu Römisch als auch von Römisch zu Dezimal.
|
||||||
* Daher muss die Umwandlung von Römisch zu Dezimal erweitert werden
|
|
||||||
*/
|
*/
|
||||||
public class DecToRoem_Version_01 {
|
public class DecToRoem_Version_01 {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
// Übersetzungstabellen für die Zahlenwerte
|
||||||
int zahl, position = 0;
|
|
||||||
|
|
||||||
//Übersetzungstabellen für die Zahlenwerte
|
|
||||||
String[] roemisch = {"M", "CM", "D", "CD", "C", "XC", "L", "XL",
|
String[] roemisch = {"M", "CM", "D", "CD", "C", "XC", "L", "XL",
|
||||||
"X", "IX", "V", "IV", "I"};
|
"X", "IX", "V", "IV", "I"};
|
||||||
|
|
||||||
int[] arabisch = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
|
int[] arabisch = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
|
||||||
|
|
||||||
//"Verbindung" zur Tastatur
|
|
||||||
Scanner input = new Scanner(System.in);
|
Scanner input = new Scanner(System.in);
|
||||||
|
String auswahl;
|
||||||
|
|
||||||
System.out.println("Konvertierung Dezimal -> Römisch");
|
do {
|
||||||
|
System.out.println("Wählen Sie die gewünschte Umwandlung:");
|
||||||
|
System.out.println("1. Dezimal -> Römisch");
|
||||||
|
System.out.println("2. Römisch -> Dezimal");
|
||||||
|
System.out.print("Ihre Auswahl: ");
|
||||||
|
int wahl = input.nextInt();
|
||||||
|
input.nextLine(); // Puffer für die nächste Eingabe leeren
|
||||||
|
|
||||||
//Eingabe von x über die Tastatur einlesen
|
if (wahl == 1) {
|
||||||
System.out.println("Eingabe von x (1 <= x <= 3999): ");
|
// Umwandlung von Dezimal nach Römisch
|
||||||
zahl = input.nextInt();
|
System.out.println("Konvertierung Dezimal -> Römisch");
|
||||||
|
System.out.print("Eingabe von x (1 <= x <= 3999): ");
|
||||||
|
int zahl = input.nextInt();
|
||||||
|
input.nextLine(); // Puffer für die nächste Eingabe leeren
|
||||||
|
|
||||||
//Umwandlung
|
// Fehleingaben abfragen
|
||||||
//Fehleingaben abfragen
|
if (zahl < 1 || zahl > 3999) {
|
||||||
if (zahl < 1 || zahl > 3999) {
|
System.out.println("Eingabe liegt außerhalb des zulässigen Bereichs!");
|
||||||
System.out.println("Eingabe liegt außerhalb des zulässigen Bereichs!");
|
|
||||||
} else {
|
|
||||||
System.out.println("Ausgabe: ");
|
|
||||||
// Die arabischen Zahlenwert-Entsprechungen von oben nach unten arbeiten
|
|
||||||
while (zahl > 0 && position < arabisch.length) {
|
|
||||||
if (zahl >= arabisch[position]) { // Anpassung der Bedingung
|
|
||||||
zahl -= arabisch[position];
|
|
||||||
System.out.print(roemisch[position]); // Ausgabe in einer Zeile
|
|
||||||
} else {
|
} else {
|
||||||
position++;
|
System.out.print("Römische Zahl: ");
|
||||||
|
int position = 0;
|
||||||
|
while (zahl > 0 && position < arabisch.length) {
|
||||||
|
if (zahl >= arabisch[position]) {
|
||||||
|
zahl -= arabisch[position];
|
||||||
|
System.out.print(roemisch[position]);
|
||||||
|
} else {
|
||||||
|
position++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println(); // Neue Zeile nach der Ausgabe
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (wahl == 2) {
|
||||||
|
// Umwandlung von Römisch nach Dezimal
|
||||||
|
System.out.println("Konvertierung Römisch -> Dezimal");
|
||||||
|
System.out.print("Eingabe einer römischen Zahl (I bis MMMCMXCIX): ");
|
||||||
|
String roemischeZahl = input.nextLine().toUpperCase();
|
||||||
|
|
||||||
|
int ergebnis = roemischZuDezimal(roemischeZahl, roemisch, arabisch);
|
||||||
|
if (ergebnis != -1) {
|
||||||
|
System.out.println("Dezimalzahl: " + ergebnis);
|
||||||
|
} else {
|
||||||
|
System.out.println("Ungültige römische Zahl!");
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
System.out.println("Ungültige Auswahl! Bitte wählen Sie 1 oder 2.");
|
||||||
}
|
}
|
||||||
System.out.println(); // Neue Zeile nach der Ausgabe
|
|
||||||
}
|
// Nach jeder Umwandlung den Benutzer fragen, ob er fortfahren möchte
|
||||||
|
System.out.print("Möchten Sie eine weitere Umrechnung durchführen? (ja/nein): ");
|
||||||
|
auswahl = input.nextLine();
|
||||||
|
|
||||||
|
} while (auswahl.equalsIgnoreCase("ja")); // Fortsetzen, wenn "ja" eingegeben wird
|
||||||
|
|
||||||
|
System.out.println("Programm beendet.");
|
||||||
input.close();
|
input.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Methode zur Umwandlung von römischen Zahlen in Dezimalzahlen
|
||||||
|
public static int roemischZuDezimal(String roemisch, String[] roemischTab, int[] arabischTab) {
|
||||||
|
int zahl = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < roemisch.length(); i++) {
|
||||||
|
boolean gefunden = false;
|
||||||
|
for (int j = 0; j < roemischTab.length; j++) {
|
||||||
|
// Überprüfen, ob ein passendes römisches Symbol vorhanden ist
|
||||||
|
if (roemisch.startsWith(roemischTab[j], i)) {
|
||||||
|
zahl += arabischTab[j];
|
||||||
|
i += roemischTab[j].length() - 1; // i um die Länge des Symbols erhöhen
|
||||||
|
gefunden = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!gefunden) {
|
||||||
|
return -1; // Ungültige römische Zahl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return zahl;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue