Java :: Aufgabe #214 :: Lösung #3
3 Lösungen

#214
Teufelskreis einer selbstbezüglichen Aussage
Anfänger - Java
von hollst
- 17.12.2018 um 18:46 Uhr
Die folgende Aussage sei gegeben als String:
"Dieser Satz hat vierzig Buchstaben sowie einen Punkt."
Die Aussage ist natürlich falsch, denn der Satz hat tatsächlich fünfundvierzig Buchstaben.
Ersetzen wir nun in der Aussage das Wort "vierzig" durch "fünfundvierzig" bleibt die Aussage aber trotzdem falsch,
denn der neue Satz hat zweiundfünfzig Buchstaben. Schöner Teufelskreis, oder?
Schreibe ein Programm mit dem überprüft wird, ob es überhaupt eine (ausgeschriebene) Zahl gibt, die oben zu einer wahren Aussage führt.
Viel Spaß!
"Dieser Satz hat vierzig Buchstaben sowie einen Punkt."
Die Aussage ist natürlich falsch, denn der Satz hat tatsächlich fünfundvierzig Buchstaben.
Ersetzen wir nun in der Aussage das Wort "vierzig" durch "fünfundvierzig" bleibt die Aussage aber trotzdem falsch,
denn der neue Satz hat zweiundfünfzig Buchstaben. Schöner Teufelskreis, oder?
Schreibe ein Programm mit dem überprüft wird, ob es überhaupt eine (ausgeschriebene) Zahl gibt, die oben zu einer wahren Aussage führt.
Viel Spaß!
#3

von luckyluke (850 Punkte)
- 12.02.2020 um 09:59 Uhr

//Hauptprogramm package com.company; public class Main { public static boolean checkLenght() { NumberToText ntt = new NumberToText(); int lenght; int i = 2; while (true) { String satz1 = "Dieser Satz hat " + ntt.intToText(i) + " Buchstaben sowie einen Punkt."; String satz2 = satz1.replace(" ", ""); lenght = satz2.length() - 1; System.out.println(satz1 + "\n Hat " + lenght + " Buchstaben"); if (lenght == i) { System.out.println(satz1 + "--> Hat genau " + lenght + " Buchstaben"); return true; } else if (i == 1000) { return true; } i++; } } public static void main(String[] args) { checkLenght(); } }Zitat:
Neue Klasse
package com.company; import java.io.BufferedReader; import java.io.InputStreamReader; public class NumberToText { public static String intToText10(int x) { int y = x / 10; /* nur Zehnerstelle */ switch (y) { case 1: return "zehn"; case 2: return "zwanzig"; case 3: return "dreißig"; case 4: return "vierzig"; case 5: return "fünfzig"; case 6: return "sechzig"; case 7: return "siebzig"; case 8: return "achtzig"; case 9: return "neunzig"; default: return "FEHLER"; } } public static String intToText100(int x, int digits) { int y = x % 100; /* nur Einer- und Zehnerstelle */ /* -- Sonderbehandlung der Zahl 1 -- */ if (y == 1) { switch (digits) { case 0: return "eins"; case 1: case 2: case 3: return "ein"; case 6: case 9: case 12: case 15: /* -- Einzahl oder Mehrzahl ? -- */ if (x == 1) { return "eine"; } else { return "ein"; } default: return "FEHLER"; } } /* -- Zahlen 2 bis 19 -- */ if ((y >= 2) && (y <= 19)) { switch (y) { case 2: return "zwei"; case 3: return "drei"; case 4: return "vier"; case 5: return "fünf"; case 6: return "sechs"; case 7: return "sieben"; case 8: return "acht"; case 9: return "neun"; case 10: return "zehn"; case 11: return "elf"; case 12: return "zwölf"; case 13: return "dreizehn"; case 14: return "vierzehn"; case 15: return "fünfzehn"; case 16: return "sechzehn"; case 17: return "siebzehn"; case 18: return "achtzehn"; case 19: return "neunzehn"; default: return "FEHLER"; } } /* -- Zahlen 20 bis 99 -- */ if ((y >= 20) && (y <= 99)) { if (y % 10 == 0) { return intToText10(y); } else { return intToText100(y % 10, 1) + "und" + intToText10(y); } } return ""; } public static String intToText1000(int x, int digits) { if (x / 100 == 0) { return intToText100(x, digits); } else { return intToText100(x / 100, 2) + "hundert" + intToText100(x, digits); } } public static String intToTextDigits(int digits, boolean mz) { if (mz) { /* Mehrzahl oder Einzahl ? */ switch (digits) { case 0: return ""; case 3: return "tausend"; case 6: return " Millionen "; case 9: return " Milliarden "; case 12: return " Billionen "; case 15: return " Billiarden "; default: return ""; } } else { switch (digits) { case 0: return ""; case 3: return "tausend"; case 6: return " Million "; case 9: return " Milliarde "; case 12: return " Billion "; case 15: return " Billiarde "; default: return ""; } } } public static String intToText(int x) { int digits; /* Anzahl der bearb. Stellen */ String result; /* Zahl in Worten */ /* -- Sonderfall 0 -- */ if (x == 0) { return "null"; } /* -- alle anderen ganzen Zahlen -- */ digits = 0; result = ""; while (x > 0) { result = (x % 1000 > 0 ? (intToText1000(x % 1000, digits) + intToTextDigits(digits, x % 1000 > 1)) : "") + result; x /= 1000; digits += 3; } return result; } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1