# römische Zahlen in arabische Zahen umwandeln



## Feras (22. Nov 2014)

Hi,

ich habe die Hausaufgabe ein Java Programm zu schreiben, welches römische Zahlen in arabische Zahlen umwandeln kann. Dazu habe ich erst mal probeweise angefangen es mit der römischen Zahl 'M' zu probieren. Jedoch erhalte ich schon hier Fehler :/

Kann mir jemand sagen, was mein Fehler hier ist? Danke  edit: Das Programm funzt nicht.


```
import java.util.Scanner;

public class aufgabe1_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

                int i = 0;
		int ergebnis = 0;

		Scanner input = new Scanner(System.in);

		System.out.println("Geben Sie bitte eine Römische Zahl ein: ");
		String rZahlen = input.nextLine();

		while(true) {

			if (rZahlen.charAt(i) == 'M') {

				ergebnis = ergebnis + 1000;

			}

			else {

				break;

			}

			i++
		}

		System.out.println(ergebnis);

	}

}
```


----------



## Thallius (22. Nov 2014)

Und was für einen Fehler sollen wir jetzt raten?

Gruß

Claus


----------



## Feras (22. Nov 2014)

Thallius hat gesagt.:


> Und was für einen Fehler sollen wir jetzt raten?
> 
> Gruß
> 
> Claus




Naja eclipse meint in Zeile 18 wäre ein Fehler. Ich weiß jedoch absolut nicht warum? Der Index eines Strings beginnt doch auch bei 0 , oder?


----------



## javampir (22. Nov 2014)

hi,
der pc ist sehr gesprächig. eclipse sagt bestimmt nicht nur, dass da ein fehler ist, sondern auch, was da für eine Fehlermeldung kommt.
javampir


----------



## Gucky (22. Nov 2014)

Tut er. Nur wirst du vermutlich eine StringIndexOutOfBoundsException bekommen, wenn das Programm läuft.
Noch mal: welchen Fehler sollen wir raten? Du musst uns sämtliche Infornationen zu dem Fehler geben, die du kriegen kannst.


----------



## Feras (22. Nov 2014)

Eclipse sagt als Fehlermeldung in line 18: 

"Thread[main](Suspended (exception StringIndexOutOfBundlesException))
String.chatAt(int) line: not available"


----------



## Saheeda (22. Nov 2014)

Die Exception sagt dir, dass du auf einen Index zugreifen willst, der nicht existiert.

Dein Problem ist die while(true)-Schleife. Angenommen, du gibst "M" ein, dann wird im ersten Durchgang korrekterweise der Index 0 überprüft und i hochgezählt. Im zweiten Durchgang hat rZahlen aber keinen Index 1, somit fliegt die Exception.

Verändere die Abbruch - bzw. die Laufbedingung deiner Schleife und es sollte funktionieren.


----------



## Feras (23. Nov 2014)

So jetzt funktioniert es. Bei length darf ich nur < und nicht <= nehmen.


```
import java.util.Scanner;

public class aufgabe1_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int ergebnis = 0;
		int i = 0;

		Scanner input = new Scanner(System.in);

		System.out.println("Geben Sie bitte eine römische Zahl ein: ");
		String rZahlen = input.nextLine();

		for (int k = 0; k < rZahlen.length(); k++) {

			if (rZahlen.charAt(i) == 'M') {

				ergebnis = ergebnis + 1000;

				i++;
			}

		}
		System.out.println(ergebnis);
	}
}
```

Kann mir jetzt einer einen Tipp geben, wie man das für alle römische Zahlen bewerkstelligen kann? Weil wenn ich meine Denkweise mit der for Schleife fortsetze und für jedes Zeichen, einschließlich VI, VII, IV, IIV, ..., eine if Abfrage mache, wird das ja ziemlich lang :/


----------



## Thallius (23. Nov 2014)

Vor allem die

IV, IIV etc. Da bekommst noch richtig Spaß

Gruß

Claus


----------



## Feras (23. Nov 2014)

Es geht vorran, allerdings weiß ich wirklich nicht, wie man I nach einem V oder X darstellen kann, da man dann den Index von charAt(i-1) setzen müsste und das nicht funktioniert. Jemand einen Tipp :3 



```
import java.util.Scanner;

public class aufgabe1_2_1 {

	public static void main(String[] args) {

		int ausgabe = 0;

		Scanner input = new Scanner(System.in);

		System.out.println("Geben Sie bitte eine römische Zahl ein: ");
		String eingabe = input.nextLine();

		for (int i = 0; i < eingabe.length(); i++) {

			if (eingabe.charAt(i) == 'I') {
				if (eingabe.charAt(i + 1) == 'V'
						|| eingabe.charAt(i + 1) == 'X') {

					ausgabe = ausgabe - 1;

				}

				else {

					ausgabe = ausgabe + 1;

				}

			}
			if (eingabe.charAt(i) == 'V') {

				ausgabe = ausgabe + 5;

			}

			if (eingabe.charAt(i) == 'X') {
				if (eingabe.charAt(i + 1) == 'L'
						|| eingabe.charAt(i + 1) == 'C') {

					ausgabe = ausgabe - 10;

				}

				else {

					ausgabe = ausgabe + 10;

				}
			}
			if (eingabe.charAt(i) == 'L') {

				ausgabe = ausgabe + 50;

			}

			if (eingabe.charAt(i) == 'C') {
				if (eingabe.charAt(i + 1) == 'D'
						|| eingabe.charAt(i + 1) == 'M') {

					ausgabe = ausgabe - 100;

				}

				else {

					ausgabe = ausgabe + 100;

				}
			}

			if (eingabe.charAt(i) == 'D') {

				ausgabe = ausgabe + 500;

			}

			if (eingabe.charAt(i) == 'M') {

				ausgabe = ausgabe + 1000;

			}

		}
		System.out.println(ausgabe);

	}
}
```


----------

