C
Chikorita
Gast
Hallo!
Ich muss ein Programm erstellen, das Zahlen in römische Zahlen umwandelt.
Leider stosse ich, je mehr ich auch verbessere, immer wieder auf Zahlen, bei denen es nicht so recht klappen will.
Kann mir bitte jemand sagen, was ich falsch mache?
Ich muss ein Programm erstellen, das Zahlen in römische Zahlen umwandelt.
Leider stosse ich, je mehr ich auch verbessere, immer wieder auf Zahlen, bei denen es nicht so recht klappen will.
Kann mir bitte jemand sagen, was ich falsch mache?
Code:
import java.io.*;
import java.util.*;
public class pflicht2_4 {
static int m = 3888; // Die maximal mögliche Zahl
public static void main(String[] args) throws IOException {
// Benötigte Variablen deklarieren
String eingabeZeile;
int dezimal;
String roemisch = "";
boolean davor = false;
// Für die Eingabe von der Tastatur
BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Bitte geben Sie eine Dezimalzahl zwischen 1 und 3888 ein: ");
// Eingabe, int-Wert einlesen
eingabeZeile = eingabe.readLine();
StringTokenizer tokens = new StringTokenizer(eingabeZeile);
dezimal = Integer.parseInt(tokens.nextToken());
// Um dafür zu sorgen, dass nur Zahlen der erlaubten Grösse eingegeben werden
if (1 <= dezimal && dezimal <= 3888) {
do {
// Um ein paar Sonderfälle zu behandeln
if ((dezimal == 11 || (dezimal + 11) % 10 == 0) && davor == true) {
roemisch = "XI" + roemisch;
dezimal -= 11;
}
if ((dezimal == 9 || (dezimal + 9) % 10 == 0) && davor == true) {
roemisch = "IX" + roemisch;
dezimal -= 9;
}
if ((dezimal == 8 || (dezimal + 8) % 10 == 0) && davor == true) {
roemisch = "VIII" + roemisch;
dezimal -= 8;
}
if ((dezimal == 7 || (dezimal + 7) % 10 == 0) && davor == true) {
roemisch = "VII" + roemisch;
dezimal -= 7;
}
if ((dezimal == 6 || (dezimal + 6) % 10 == 0) && davor == true) {
roemisch = "VI" + roemisch;
dezimal -= 6;
}
// Die Zahl ist zwischen 1 und 3
if (1 <= dezimal && dezimal <= 3) {
if (dezimal >= 1 && davor == false) {
roemisch = roemisch + "I";
dezimal -= 1;
davor = false;
}
else {
roemisch = "I" + roemisch;
dezimal -= dezimal - (1 - dezimal);
davor = true;
}
}
else {
// Die Zahl ist zwischen 4 und 8
if (4 <= dezimal && dezimal <= 8) {
// Die Zahl ist grösser oder gleich 5 und muss vor das bishere Ergebnis gesetzt werden
if (dezimal >= 5 && davor == false) {
roemisch = roemisch + "V"; // Die 5 wird hinten angehängt
dezimal -= 5; // Von der Ausgangszahl wird die verarbeitete 5 abgezogen
davor = false; // Die nächste Ziffer kommt hinter das bisherige Ergebnis
}
// Alle anderen Fälle
else {
roemisch = "V" + roemisch; // Die 5 wird vorne vorgesetzt
dezimal -= dezimal - (5 - dezimal); // Von der Ausgangszahl wird sie selbst und 5 - sie selbst abgezogen
davor = true; // Die nächste Zahl kommt vor das bisherige Ergebnis
}
// Die weiteren Anweisungsblöcke nach dem gleichen Prinzip mit angepassten Zahlen
}
else {
// Die Zahl ist zwischen 9 und 38
if (9 <= dezimal && dezimal <= 38) {
if (dezimal >= 10 && davor == false) {
roemisch = roemisch + "X";
dezimal -= 10;
davor = false;
}
else {
roemisch = "X" + roemisch;
dezimal -= dezimal - (10 - dezimal);
davor = true;
}
}
else {
// Die Zahl ist zwischen 39 und 88
if (39 <= dezimal && dezimal <= 88) {
if (dezimal >= 50 && davor == false) {
roemisch = roemisch + "L";
dezimal -= 50;
davor = false;
}
else {
roemisch = "L" + roemisch;
dezimal -= dezimal - (50 - dezimal);
davor = true;
}
}
else {
// Die Zahl ist zwischen 89 und 388
if (89 <= dezimal && dezimal <= 388) {
if (dezimal >= 100 && davor == false) {
roemisch = roemisch + "C";
dezimal -= 100;
davor = false;
}
else {
roemisch = "C" + roemisch;
dezimal -= dezimal - (100 - dezimal);
davor = true;
}
}
else {
// Die Zahl ist zwischen 389 und 888
if (389 <= dezimal && dezimal <= 888) {
if (dezimal >= 500 && davor == false) {
roemisch = roemisch + "D";
dezimal -= 500;
davor = false;
}
else {
roemisch = "D" + roemisch;
dezimal -= dezimal - (500 - dezimal);
davor = true;
}
}
else {
// Die Zahl ist zwischen 889 und 3888
if (889 <= dezimal && dezimal <= 3888) {
if (dezimal >= 1000 && davor == false) {
roemisch = roemisch + "M";
dezimal -= 1000;
davor = false;
}
else {
roemisch = "M" + roemisch;
dezimal -= dezimal - (1000 - dezimal);
davor = true;
}
}
}
}
}
}
}
}
System.out.println("D: " + dezimal + ", R: " + roemisch);
}
while (dezimal >= 1); // Abbruchbedingung
// Ergebnis-Ausgabe
System.out.println("Das entspricht der römischen Zahl: " + roemisch);
}
else {
// Ausgabe der Fehlermeldung
System.out.println("Ihre Zahl ist leider zu gross oder zu klein.");
}
}
}