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

3 Lösungen Lösungen öffentlich
#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ß!

#3
vote_ok
von luckyluke (850 Punkte) - 12.02.2020 um 09:59 Uhr
Quellcode ausblenden Java-Code
//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

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