Zahlen von 1-999 in Java in Worten ausgeben?

5 Antworten

ist zwar kein Java aber ich fand die aufgabe recht amüsant.

hier eine lösung in C# kann aber noch optimiert werden war mein erster anlauf in der umsetzung


class Program
{
static string[] stelle1a= new string[10] { "null", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun" };
static string[] stelle1b = new string[10] { "", "einund", "zweiund", "dreiund", "vierund", "fünfund", "sechsund", "siebenund", "achtund", "neunund" };
static string[] stelle2a = new string[3] { "zehn", "elf", "zwölf"};
static string[] stelle2b = new string[10] { "", "zehn", "zwanzig", "dreißig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig" };
static string[] stelle3 = new string[10] { "", "einhundert", "zweihundert", "dreihundert", "vierhundert", "fünfhundert", "sechshundert", "siebenhundert", "achthundert", "neunhundert" };

static void Main(string[] args)
{


for (int i = 0; i < 1000; i++)
{

if (i < 10) Console.Write(stelle1a[i]);
else if (i < 13)
{
Console.Write(stelle2a[i - 10]);
}
else if (i < 20)
{
if (i == 16) { Console.Write("sechzehn"); }
else if (i == 17) { Console.Write("siebzehn"); }
else Console.Write(stelle1a[i - 10] + "zehn");
}
else if (i < 100) {
Console.Write (get_zehner(i));
}
else
{
Console.Write(stelle3[i/100]);
Console.Write(get_zehner(i));
}
Console.Write(Environment.NewLine);
}
Console.ReadLine();
}
static string get_zehner (int i)
{
string ret = null;
int einser = i - ((i / 10) * 10);
int zweier = (i>=100)?i/100:i / 10;
ret += stelle1b[einser];
ret += stelle2b[zweier];
return ret;
}
}
Kiboman  30.03.2017, 00:19

mir fällt grade auf da ist irgendwo total der wurm drinn ^^

0
Kiboman  30.03.2017, 00:45
@Kiboman

nochmal fehler bereinigt, keine ahnung ob das eine effiziente lösung ist, aber sie funktionert:

class Program
{
static string[] stelle1a= new string[10] { "", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun" };
static string[] stelle1b = new string[10] { "", "einund", "zweiund", "dreiund", "vierund", "fünfund", "sechsund", "siebenund", "achtund", "neunund" };
static string[] stelle2a = new string[3] { "zehn", "elf", "zwölf"};
static string[] stelle2b = new string[10] { "", "zehn", "zwanzig", "dreißig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig" };
static string[] stelle3 = new string[10] { "", "einhundert", "zweihundert", "dreihundert", "vierhundert", "fünfhundert", "sechshundert", "siebenhundert", "achthundert", "neunhundert" };

static void Main(string[] args)
{

for (int i = 0; i < 1000; i++)
{
if (i == 0) Console.Write("null");
else if (i < 10) Console.Write(stelle1a[i]);
else if (i < 13)
{
Console.Write(stelle2a[i - 10]);
}
else if (i < 20)
{
if (i == 16) { Console.Write("sechzehn"); }
else if (i == 17) { Console.Write("siebzehn"); }
else Console.Write(stelle1a[i - 10] + "zehn");
}
else if (i < 100) {
Console.Write (get_zehner(i));
}
else
{
int a = (i - (i / 100) * 100);
Console.Write(stelle3[i/100]);
if (a > 9 && a < 20)
{
if (a < 13) Console.Write(stelle2a[a - 10]);
else if (a == 16) { Console.Write("sechzehn"); }
else if (a == 17) { Console.Write("siebzehn"); }
else Console.Write(stelle1a[a-10] + "zehn");
}
else Console.Write(get_zehner(i));
;
}
Console.Write("-"+i);
Console.Write(Environment.NewLine);
}
Console.ReadLine();
}
static string get_zehner (int i)
{
string ret = null;
int einser = i - ((i / 10) * 10);
int zweier = (i>=100)?(i-((i/100)*100))/10:i / 10;
ret += (zweier == 0)? stelle1a[einser]:stelle1b[einser];
ret += stelle2b[zweier];
return ret;
}
}
0
KnusperPudding  30.03.2017, 08:07
@Kiboman

Durchaus verständlich wenn einen mal eine Aufgabe reizt, aber dem Fragesteller das Ergebnis zu präsentieren anstatt ihm zu helfen, die Aufgabe selbst zu lösen kann natürlich auch nach hinten los gehen:

da ist irgendwo total der wurm drinn

Das soll kein Vorwurf sein, sondern ein Vorschlag.

Dem Fragesteller ist am ehesten geholfen, wenn man ihm erklärt, wie er das Problem lösen kann:

Von einem fertigen Kuchen, weiß ich nicht, wie er gebacken wurde.

1
Kiboman  30.03.2017, 09:25
@KnusperPudding

das mit worten verständlich zu erklären ist noch schwieriger als die aufgabe selbst.

da ich das in c# geschrieben habe kann er den code eh nicht 1:1 übernehmen und muss sich zwangsläufig mit dem inhalt auseinandersetzten um seine Lösung in java lauffähig zu bekommen.

im grunde stimme ich dir aber zu, das vorkauen meist nicht hilfreich ist.

0
Kiboman  30.03.2017, 09:40
@KnusperPudding

zudem ist es der erste entwurf der kann noch um einiges optimiert werden, sollte er auch.

0
Etter  30.03.2017, 17:38
@KnusperPudding

"Von einem fertigen Kuchen, weiß ich nicht, wie er gebacken wurde."

Naja gut dass es kein Kuchen ist ;)

Quellcode ansehen, alles was man nicht kennt per Google lernen und ggf. mitm Debugger ran ^^.

1
Kiboman  30.03.2017, 17:40
@Etter

betrachte meinen code als teig mischung ohne gebrauchsanweisung ;)

der kuchen ist fertig kompiliert.

0
Mineloki  08.04.2017, 01:42
@Kiboman

Meine Güte, jetzt hab ich Hunger auf Kuchen..

Danke Leute :(

0
Kiboman  08.04.2017, 08:26
@Mineloki

hast es hinbekommen?

ich hätte noch eine optimierte Lösung, die wäre dann wirklich fertig.

0

Es ist interessant. Ich habe andere Aufgabe bei IBM gehabt - "speech to text".

(US, US-military,  DE, IT, FR usw)

Habe für alles Grammars mit LEX geschrieben.

Du kannst es umgekehrt machen:  Datum zum Wort (mit Tabelle, ob Output US oder DE oder Bayrisch ist), dann nur ein Sprachgenerator einschalten - haben wir auf Bayrisch für BMW auch gebastelt :-)))

LEX ist genug, im schwierigen Fällen auch YACC.

x=In.readInt();
if(x==1){
Out.println("eins");
}
if(x==2){
Out.println("zwei");
}

usw..
1Metrox1 
Fragesteller
 29.03.2017, 22:59

Darauf bin ich auch gekommen. Nur weiß ich nicht wie ich die Dinger am Ende verknüpfen soll.

0

Aufteilen kannst du es mit Modulo, den Strings zuweisen mit Switch-Case.

Verknüpfen kannste mit + oder +=.

Beispielsweise:

String test="";

test+="a";
test+="b;
test="a" + "b";

Sollte zumindest so klappen.

https://bitbucket.org/snippets/Ettar/AjqL4

Das ist n bissl was, was ich fix dazu geschrieben habe.

1Metrox1 
Fragesteller
 30.03.2017, 16:45

Gibt es denn eine Möglichkeit das ohne dieses String args zu schreiben? Sowas hatten wir noch nicht, ist auch nicht gefordert.

0
timlg07  30.03.2017, 21:18
@1Metrox1

Das gehört zur main Methode. Kannst du fürn anfang auch weglassen.

0
Etter  30.03.2017, 21:20
@timlg07

Ich würds gleich richtig lernen. Spätestens wenn man mit ner IDE arbeitet, wird die das anmäckeln. Zumal es ja keinen wirklichen Unterschied im Quellcode macht, außer die paar Zeichen.

0