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:

javampir

Bekanntes Mitglied
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

Top Contributor
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

Aktives Mitglied
Eclipse sagt als Fehlermeldung in line 18:

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

Saheeda

Top Contributor
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:

Feras

Aktives Mitglied
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 :/
 

Feras

Aktives Mitglied
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);

	}
}
 

Neue Themen


Oben