# römische Zahlen in Dezimal ausgeben



## dolu28 (4. Jun 2017)

Hallo, ich muss römische Zahlen eingeben und es muss als Dezimal ausgegeben werden, ich habe es mit dieser Methode versucht:

```
public static void RomToDez() {
        int[] dez = { 900, 500, 100, 50, 10, 5, 1 };
        String[] ro = { "CM", "D", "C", "L", "X", "V", "I" };
        Scanner sc = new Scanner(System.in);
        System.out.println("röm. Zahl eingeben:");
        String eingabe = sc.nextLine();
        for (int i = 0; i < 8; i++) {
            if (eingabe.equals(ro[i])) {
                System.out.println(dez[i]);
            }}
```
Das funktioniert für z.B CM -> 900 aber wenn ich 901 haben will, also CMI eingebe geht es nicht.
Ich weiß nicht wie ich die hintere Zahl (I) miteinbeziehen soll. Mfg


----------



## Meniskusschaden (4. Jun 2017)

Wenn du eine römische Ziffer entschlüsselt hast, solltest du sie nicht sofort ausgeben, sondern in dein dezimales Ergebnis einrechnen, welches du dann zum Schluss ausgeben kannst. Außerdem musst du dabei prüfen, ob die römische Ziffer positiv oder negativ eingerechnet werden muss.
Warum beginnst du eigentlich mit CM und nicht mit M?


----------



## Meniskusschaden (4. Jun 2017)

Außerdem verarbeitest du die römischen Ziffern bisher nicht einzeln, sondern die gesamte Eingabe auf einmal. Das funktioniert nicht.


----------



## dolu28 (4. Jun 2017)

wie kann ich den die Eingabe einzeln verarbeiten?


----------



## Meniskusschaden (4. Jun 2017)

`eingabe.charAt()` oder `eingabe.toCharArray()`könnten nützlich sein.


----------



## dolu28 (4. Jun 2017)

aber ich kann doch kein char mit array vergleichen oder? hab es mit equals und == versucht.

```
char out= eingabe.charAt(1);
        for (int i = 0; i < 8; i++) {
            if (out ==ro[i]) { //das hier funktioniert nicht
                System.out.println(dez[i]);
            }
```


----------



## Meniskusschaden (4. Jun 2017)

ro ist ein String-Array, demzufolge ist `ro[ i ]` ein String. Du könntest ro aber auch als char-Array vorsehen. Dann kannst du zwar nicht mehr "CM" darin speichern, sondern nur einzelne Zeichen, aber diese CM-Sache ist ohnehin nicht sinnvoll.


----------



## Xyz1 (5. Jun 2017)

Schnell gesucht:
https://stackoverflow.com/a/9073310
und
http://frequal.com/RomanNumerals/index.html
und
Tiny Java library for formatting and parsing Roman numerals.:
https://github.com/fracpete/romannumerals4j
https://jar-download.com/?search_box=romannumerals4j

Beispiel:

```
import com.github.fracpete.romannumerals4j.RomanNumeralFormat;
import java.text.ParseException;
import java.util.Random;

/**
 * @author
 */
public class RomanNumerals {

    public static void main(String[] args) throws ParseException {
        int i = new Random(123).nextInt(3999) + 1;
        RomanNumeralFormat f = new RomanNumeralFormat();
        String roman = f.format(i);
        f = new RomanNumeralFormat();
        int integ = (int) f.parse(roman);
        System.out.println("i     = " + i);
        System.out.println("roman = " + roman);
        System.out.println("integ = " + integ);
    }
}
```

Ergebnis:

```
i     = 1131
roman = MCXXXI
integ = 1131
```

Probleme:
"Nur" Zahlen von 1 bis 3999, warum? Sind kleine Zahlen eindeutig - oder kann man auch IIII und/oder IV schreiben? Sind große Zahlen eindeutig?

Besser nichts selber schreiben, dabei.


----------



## swimmy2103 (22. Sep 2017)

Interressant für die Programmierung ist auch der zweite hier vorgestellte Ansatz (auf der Seite ganz unten):
http://mathematik-kapiert.de/roemische-zahlen-umrechnung-2/
_
"Man identifiziert die einzelnen Stellen einer Römischen Zahl, indem man wie folgt vorgeht:
_

_Die Tausenderstelle ist einfach zu erkennen: alle *M* am Anfang der Römischen Zahl._
_Die Hunderterstelle beginnt immer mit dem ersten *C* oder *D*._
_Die Zehnerstelle beginnt immer mit dem ersten *X* oder *L*._
_Die Einerstelle beginnt immer mit dem ersten *I* oder *V*."_
So zerlegt man die Römische Zahl in ihre "Bausteine" für jede Stelle (Tausender, Hunderter, Zehner, Einer). Die Werte der insgesamt 33 Bausteine kann man zum Beispiel in einem assoziativen Array ablegen. Dann muss man sie nur noch zusammenaddieren.


----------



## JStein52 (22. Sep 2017)

Hast du dir schon mal das Datum des letzten Eintrags angesehen ?


----------

