Java :: Aufgabe #291 :: Lösung #1

1 Lösung Lösung öffentlich
#291

Zahlen in Wörtern ausdrücken

Anfänger - Java von Gisbert5020 - 30.04.2020 um 15:17 Uhr
Schreiben Sie ein Programm, das Zahlen von 0 bis 99 in Wörtern fasst.
Zusatzaufgabe : Erweitern Sie das Programm von 0 bis 1000.
#1
vote_ok
von unknown (250 Punkte) - 03.09.2020 um 10:14 Uhr
Quellcode ausblenden Java-Code
package versuchslabor;

import java.util.HashMap;
import java.util.Map;

//		Schreiben Sie ein Programm, das Zahlen von 0 bis 99 in Wörtern fasst.
//		Zusatzaufgabe : Erweitern Sie das Programm von 0 bis 1000.
public class ZahlAlsText {

	// Basis Wörterbuch, enthält auch Besonderheiten wie 11 und 12
	static Map<String, String> woerterbuch = new HashMap<String, String>() {
		{
			put("0", "Null");
			put("1", "Ein");
			put("2", "Zwei");
			put("3", "Drei");
			put("4", "Vier");
			put("5", "Fünf");
			put("6", "Sechs");
			put("7", "Sieben");
			put("8", "Acht");
			put("9", "Neun");
			put("10", "Zehn");
			put("11", "Elf");
			put("12", "Zwölf");
			put("20", "Zwanzig");
			put("1000", "Tausend");
		}
	};

	public static void main(String[] args) {
		for (int intZahl = 0; intZahl <= 1000; intZahl++) {
			String zahlAlsText = findeZahlAlsText(intZahl);
			System.out.println(intZahl + " als Wort lautet: " + zahlAlsText);
		}
	}

	private static String findeZahlAlsText(int intZahl) {
		String strZahl = String.valueOf(intZahl);

		String zahlAlsText = woerterbuch.get(strZahl); //steht Zahl direkt im Wörterbuch?
		if (zahlAlsText == null) {
			switch (strZahl.length()) {
			case 2: // 13-99
				zahlAlsText = zehner(strZahl);
				break;
			case 3: // >= 100
				zahlAlsText = hundert(strZahl);
				break;
			default:
				zahlAlsText = "unbekannte Zahl";
				break;
			}
		}
		return zahlAlsText;
	}

	private static String zehner(String strZahl) {
		String zahlAlsText = "unbekannt";
		int intZahl = Integer.parseInt(strZahl);

		if (intZahl % 10 == 0) {
			zahlAlsText = woerterbuch.get(strZahl.substring(0, 1)) + "Zig";
		} else if (intZahl > 12 && intZahl < 20) {
			zahlAlsText = woerterbuch.get(strZahl.substring(1, 2)) + "Zehn";
		} else if (intZahl >= 20 && intZahl < 30) {
			zahlAlsText = woerterbuch.get(strZahl.substring(1, 2)) + "Zwanzig";
		} else {
			zahlAlsText = woerterbuch.get(strZahl.substring(1, 2)) + "Und" + woerterbuch.get(strZahl.substring(0, 1))
					+ "Zig";
		}
		return zahlAlsText;
	}

	private static String hundert(String strZahl) {
		String zahlAlsText = woerterbuch.get(strZahl.substring(0, 1)) + "Hundert";
		// Zehner-Anylsyse ist nicht für glatte Hunterter nötig - 100, 200, 300,...
		if (Integer.parseInt(strZahl) % 100 != 0) {
			zahlAlsText += zehner(strZahl.substring(1, 3));
		}
		return zahlAlsText;
	}
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben