From 974f0e38ff7d23d51572ca474beed62118c88e17 Mon Sep 17 00:00:00 2001 From: 3009857 <3009857@stud.hs-mannheim.de> Date: Fri, 18 Oct 2024 10:32:40 +0200 Subject: [PATCH] =?UTF-8?q?Die=20Umwandlung=20von=20R=C3=B6misch=20->=20De?= =?UTF-8?q?zimal=20wurde=20erweitert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/Uebung_01/DecToRoem_Version_01.java | 104 +++++++++++++----- 1 file changed, 78 insertions(+), 26 deletions(-) diff --git a/src/main/java/Uebung_01/DecToRoem_Version_01.java b/src/main/java/Uebung_01/DecToRoem_Version_01.java index 9bb819f..50c3e42 100644 --- a/src/main/java/Uebung_01/DecToRoem_Version_01.java +++ b/src/main/java/Uebung_01/DecToRoem_Version_01.java @@ -4,47 +4,99 @@ import java.util.Scanner; /** * @author Hanin Aljalab - * Anmerkung: in dieser Version findet nur die Umwandlung von - * Dezimal zu Römisch statt. - * Daher muss die Umwandlung von Römisch zu Dezimal erweitert werden + * Anmerkung: Diese Version unterstützt nun sowohl die Umwandlung + * von Dezimal zu Römisch als auch von Römisch zu Dezimal. */ public class DecToRoem_Version_01 { public static void main(String[] args) { - - int zahl, position = 0; - - //Übersetzungstabellen für die Zahlenwerte + // Übersetzungstabellen für die Zahlenwerte String[] roemisch = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; int[] arabisch = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; - //"Verbindung" zur Tastatur 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 - System.out.println("Eingabe von x (1 <= x <= 3999): "); - zahl = input.nextInt(); + if (wahl == 1) { + // Umwandlung von Dezimal nach Römisch + 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 - if (zahl < 1 || zahl > 3999) { - 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 + // Fehleingaben abfragen + if (zahl < 1 || zahl > 3999) { + System.out.println("Eingabe liegt außerhalb des zulässigen Bereichs!"); } 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(); } + + // 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; + } } \ No newline at end of file