römische Zahlen in arabische Zahen umwandeln

Feras

Aktives Mitglied
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.

Java:
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);

	}

}
 
Zuletzt bearbeitet:
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
 
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.
 
Eclipse sagt als Fehlermeldung in line 18:

"Thread[main](Suspended (exception StringIndexOutOfBundlesException))
String.chatAt(int) line: not available"
 
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.
 
Zuletzt bearbeitet:
So jetzt funktioniert es. Bei length darf ich nur < und nicht <= nehmen.

Java:
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 :/
 
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


Java:
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);

	}
}
 

Zurück
Oben