# Java-Programm: Zahlen in Worte



## InfoLehrlinge (15. Nov 2012)

Guten Tag,
wir haben ein Problem, wir wollen ein Programm schreiben, haben jedoch einige Probleme damit. Wir stehen völlig auf dem Schlauch!
Wir haben uns in den Kopf gesetzt ein Prgramm zu schreiben, dass Zahlen in Worten ausgibt. 
Beispiel: 254 -> zweihundertvierundfünfzig
und das alles in einem Applet.
Die Zahlen sollen bis 9999 gehen.. 

Vielen Dank im vorraus!


----------



## freez (15. Nov 2012)

Und was ist deine Frage?


----------



## Tatze64 (15. Nov 2012)

Vermute mal die Frage lautet: Wie könnten wir sowas umsetzen.
Einfache, aber sehr langwirige Methode:


```
int userzahl;
String zahlAlsWort;

if (userzahl==0)
 zahlAlsWort="Null";

else if(userzahl==1)
 zahlAlsWort="Eins";
...
```
Sehr schlechter Lösungansatz da ihr dafür 10000 Anweisungen braucht.
Aber evtl findet ihr oder jemmand anderes hier nen Umbau dafür^^


----------



## Trolllllll (15. Nov 2012)

Ja du machst das echt zu kompliziert, nimm 
	
	
	
	





```
switch case
```
 das ist für sowas gedacht als deine 10000 ifs ;-)


----------



## Tatze64 (15. Nov 2012)

Ja aber wären das dann nicht ebenfalls die 10000 Switch cases und somit das Problem nur umgelagert?
Bzw wo würde dann der vorteil beim Switch liegen?


----------



## VfL_Freak (15. Nov 2012)

Moin,

ich würde mir eine kleine Grammatik bauen, die die Zahl analysiert und dann den String entsprechend der jeweiligen 10er-Potenzen aufbaut ...

gruß
Klaus


----------



## Landei (15. Nov 2012)

Die Bibliothek ICU4J kann sowas: ICU 50.1: icu::RuleBasedNumberFormat Class Reference

Ansonsten müsst ihr euch halt mit Grammatik auseinandersetzen. Wenn ich z.B. dreihundertsiebzehn und dreihundertneunundneunzig habe, ist dem "dreihundert"-Teil ja völlig egal, was danach kommt, ihr könnt eure Zahl demnach in logische Blöcke aufteilen.


----------



## Trolllllll (15. Nov 2012)

ja das schon, finde ich aber schöner als 10.000 ifs, dann lieber 10.000 cases ;-)

Das ist zu langweilig, dann sind es ja keine 10.000 abfragen mehr (und mann muss den Sonderfall zehn, elf, zwölf, zwanzig beachten, bei allen anderen zahlen geht es)

9999 - neun tausen neun hundert neun und neun zig
15 - fünf zehn
31 - ein und drei zig
11 - elf


----------



## Landei (15. Nov 2012)

Mal ganz primitiv bis 999999


```
public class Spellout {

    private final static String[] SMALL = {
        "","eins","zwei","drei","vier","fünf","sechs","sieben","acht","neun","zehn",
        "elf","zwölf","dreizehn","vierzehn","fünfzehn","sechzehn","siebzehn","achtzehn","neunzehn"
    };

    private final static String[] TENS = {"","",
            "zwanzig","dreißig","vierzig","fünfzig",
            "sechzig","siebzig","achzig","neunzig"};

    public static String spellout(int number) {
        if (number < 0 || number > 999999) {
            throw new IllegalArgumentException();
        }
        if (number == 0) return "null";
        StringBuilder sb = new StringBuilder();
        int thousands = number / 1000;
        int underThousand = number % 1000;
        if (thousands != 0) {
            sb.append(hundreds(thousands)).append(" tausend");
            if(underThousand != 0) sb.append(" und ");
        }
        if(underThousand != 0) sb.append(hundreds(underThousand));
        return sb.toString();
    }

    private static String hundreds(int number) {
        StringBuilder sb = new StringBuilder();
        int hundreds = number / 100;
        sb.append(hundreds == 1 ? "ein" : SMALL[hundreds]);
        if (hundreds != 0) {
            sb.append("hundert ");
        }
        int underHundreds = number % 100;
        if (underHundreds > 0) {
            if(underHundreds < 20)  {
                 sb.append(SMALL[underHundreds]);
            } else {
                int tens = underHundreds / 10;
                int ones = underHundreds % 10;
                if (ones > 0) {
                    sb.append(ones == 1 ? "ein" : SMALL[ones]).append(" und ");
                }
                sb.append(TENS[tens]);
            }
        }
        return sb.toString();
    }
}
```


----------



## ARadauer (15. Nov 2012)

mhn als Ausbildner würde ich hier als ersts suchen... würde ich dann meine eigenen Aufgabenstellungen wiederfinden könnten sich meine Azubis schnell eine neue Arbeit suchen ;-)


----------



## 127.0.0.1 (15. Nov 2012)

ich hab grad Spaßhalber einfach mal bei einer Suchmaschine eingegeben: "java zahlen in worten"

....war erstaunt was man da alles findet :rtfm:

_und teilweise sogar schon fertigen Code_


----------



## Marco13 (15. Nov 2012)

Alles wiederholt sich http://www.java-forum.org/java-basics-anfaenger-themen/101353-int-string-umwandeln.html#post645321

EDIT: Link geändert, alles wiederholt sich mehrfach


----------



## ssoul26 (15. Nov 2012)

Im Endeffekt brauchst du für so ein Programm bis 9999 -> 9+10+10+10 = 39 Einträge. Pack diese in 4 Arrays, und baue dir ganz einfach deinen String aus diesen String-Arrays zusammen.


----------



## Landei (15. Nov 2012)

ssoul26 hat gesagt.:


> Im Endeffekt brauchst du für so ein Programm bis 9999 -> 9+10+10+10 = 39 Einträge. Pack diese in 4 Arrays, und baue dir ganz einfach deinen String aus diesen String-Arrays zusammen.



Was soll da bei 1312 rauskommen? Tausenddreihundertzehnzwei? Ganz so einfach ist es nicht, siehe mein Programm.


----------



## ssoul26 (15. Nov 2012)

Landei hat gesagt.:


> Was soll da bei 1312 rauskommen? Tausenddreihundertzehnzwei? Ganz so einfach ist es nicht, siehe mein Programm.



Die Sonderstellung bei 11 und 12 muss man natürlich beachten, das stimmt, danke.


----------



## Landei (15. Nov 2012)

Und 13 bis 19 auch. Dann hat man in "einundfünfzig" ein "und" und in "fünfzig" nicht, u.s.w.


----------



## 127.0.0.1 (16. Nov 2012)

Landei hat gesagt.:


> Und 13 bis 19 auch. Dann hat man in "einundfünfzig" ein "und" und in "fünfzig" nicht, u.s.w.



Deutsche Sprache, schwere Sprache :bae:


----------



## pappawinni (16. Nov 2012)

Marco13 hat gesagt.:


> Alles wiederholt sich http://www.java-forum.org/java-basics-anfaenger-themen/101353-int-string-umwandeln.html#post645321
> 
> EDIT: Link geändert, alles wiederholt sich mehrfach



Richtig, mehrfach..daran hab ich mich z.B. noch erinnert:
http://www.java-forum.org/java-basics-anfaenger-themen/132119-zahl-text-umwandeln.html#post866333

Mit der Forensuche war ich da aber nicht so wirklich erfolgreich.


----------



## InfoLehrlinge (22. Nov 2012)

Vielen Dank für gar nichts, wir habens ohne euch geschafft.
Ach und Azubildende sind wir nicht, wohl eher bald dein Arbeitgeber


----------



## Marco13 (22. Nov 2012)

Wow! Ihr habt es tatsächlich ohne uns geschafft, den Quellcode aus dem Post, den ich verlinkt hatte rauszukopieren? Und in eine IDE einzufügen!? Und zu compilieren!?!?!!!!1111einseinselfelf  So einen Arbeitgeber hätte ich auch gerne, dann bräuchte ich endlich nicht mehr selbst dauernd in diesem Forum nach Lösungen für meine Probleme zu suchen, sondern das endlich nach oben weiterdelegieren. 

(Sorry, hatte gerade noch ein paar Klumpen verschimmeltes Troll-Futter in der Hosentasche, das mußte weg)


----------



## faetzminator (22. Nov 2012)

[OT]Sorry für noch mehr OT...


InfoLehrlinge hat gesagt.:


> Ach und Azubildende sind wir nicht, wohl eher bald dein Arbeitgeber


Somit habt ihr euch gleich zum zweiten Mal lächerlich gemacht, wenn ihr demnach euch nicht mal InfoArbeitgeber oder InfoDAUs statt InfoLehrlinge nennen könnt :bae:
[/OT]


----------



## Spacerat (22. Nov 2012)

Was ist denn hier los? köstlich... :lol:
BTW.: Arbeitgeber dürfen keine dummen Fragen stellen. Arbeitgeber wissen meist wie's geht.


----------



## 127.0.0.1 (22. Nov 2012)

Spacerat hat gesagt.:


> Was ist denn hier los? köstlich... :lol:



hihi....auf jeden Fall unterhaltsam xD
und es sieht mir ganz dannach aus als würden die Phasen 5 und 5b in Kraft treten oder ?
*hust* Flamewar *hust*


P.S. Perfekte Antworten von Marco13 und faetzminator ^^


----------

