Hallo an alle,
Da ich Quereinsteiger bin (kein Studium) versuche ich mich an div. Übungsaufgaben in Java und bin bei der Uni Koblenz fündig geworden.
Die Aufgabe: Erzeugen Sie Zahlworte für die Zahlen 0...999.999.999.
Beispiel: 123 hundertdreiundzwanzig.
Ich habe mich daran gewagt und mein Ansatz war folgender:
Schön und gut aber ich bin dann auf die ersten ausnahmen gestoßen wie zum Beispiel 11,12,13 oder glatte endungen z.b. 900000000...
Ich bin also dabei alle Ausnahmen mit if abfragen einzeln zu betrachten.
Verrenne ich mich grade in etwas oder komme ich nicht drumherum?
Da ich Quereinsteiger bin (kein Studium) versuche ich mich an div. Übungsaufgaben in Java und bin bei der Uni Koblenz fündig geworden.
Die Aufgabe: Erzeugen Sie Zahlworte für die Zahlen 0...999.999.999.
Beispiel: 123 hundertdreiundzwanzig.
Ich habe mich daran gewagt und mein Ansatz war folgender:
Java:
public class C3 {
private static String[] zw1_9 = {
"eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun",
};
private static String[] zw10_12= {
"zehn","elf","zwoelf"
};
private static String[] zw20_90 = {
"zwanzig","dreizig","vierzig","fuenfzig","sechzig","siebzig","achtzig","neunzig",
};
private static String zw100 = "hundert";
private static String zw1000 = "tausend";
private static String zw1000000 = "millionen";
private static String und = "und";
private static int eingabewert = 999000000;
public static void main(String[] args) {
int zahl = eingabewert;
String buf = Integer.toString(zahl);
int[] array = new int[buf.length()];
for( int i=0; i < buf.length(); i++ ) {
array[i] = Character.getNumericValue(buf.charAt(i));
}
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2])+ zw1000000 +
(zw1_9[array[3]-1]+zw100) + (zw1_9[array[5]-1])+ und +(zw20_90[array[4]-2])+ zw1000 +
(zw1_9[array[6]-1]+zw100) + (zw1_9[array[8]-1])+ und +(zw20_90[array[7]-2]));
break;
}
}}
Schön und gut aber ich bin dann auf die ersten ausnahmen gestoßen wie zum Beispiel 11,12,13 oder glatte endungen z.b. 900000000...
Ich bin also dabei alle Ausnahmen mit if abfragen einzeln zu betrachten.
Code:
package Übungen;
public class C3 {
private static String[] zw1_9 = {
"eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun",
};
private static String[] zw10_12= {
"zehn","elf","zwoelf"
};
private static String[] zw20_90 = {
"zwanzig","dreizig","vierzig","fuenfzig","sechzig","siebzig","achtzig","neunzig",
};
private static String zw100 = "hundert";
private static String zw1000 = "tausend";
private static String zw1000000 = "millionen";
private static String und = "und";
private static int eingabewert = 999000000;
public static void main(String[] args) {
// TODO Automatisch generierter Methodenstub
int zahl = eingabewert;
String buf = Integer.toString(zahl);
int[] array = new int[buf.length()];
for( int i=0; i < buf.length(); i++ ) {
array[i] = Character.getNumericValue(buf.charAt(i));
}
//Ausnahme für einhundertmillionen
if(array[0]==1) {
zw1_9[0] = "ein";
}
//Ausnahme für 10,11,12 im 10er Bereich
if(array[7]==1 && array[8]==0 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2])+ zw1000000 +
(zw1_9[array[3]-1]+zw100) + (zw1_9[array[5]-1])+ und +(zw20_90[array[4]-2])+ zw1000 +
(zw1_9[array[6]-1]+zw100) + zw10_12[0]);
break;
}
}else if(array[7]==1 && array[8]==1 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2])+ zw1000000 +
(zw1_9[array[3]-1]+zw100) + (zw1_9[array[5]-1])+ und +(zw20_90[array[4]-2])+ zw1000 +
(zw1_9[array[6]-1]+zw100) + zw10_12[1]);
break;
}
}else if(array[7]==1 && array[8]==2 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2])+ zw1000000 +
(zw1_9[array[3]-1]+zw100) + (zw1_9[array[5]-1])+ und +(zw20_90[array[4]-2])+ zw1000 +
(zw1_9[array[6]-1]+zw100) + zw10_12[2]);
break;
}
//Ausnahme für 10,11,12 im 1000er Bereich
}else if(array[4]==1 && array[5]==0 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2])+ zw1000000 +
(zw1_9[array[3]-1]+zw100) + zw10_12[0] + zw1000 +
(zw1_9[array[6]-1]+zw100) + (zw1_9[array[8]-1])+ und +(zw20_90[array[7]-2]));
break;
}
}else if(array[4]==1 && array[5]==1 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2])+ zw1000000 +
(zw1_9[array[3]-1]+zw100) + zw10_12[1] + zw1000 +
(zw1_9[array[6]-1]+zw100) + (zw1_9[array[8]-1])+ und +(zw20_90[array[7]-2]));
break;
}
}else if(array[4]==1 && array[5]==2 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2])+ zw1000000 +
(zw1_9[array[3]-1]+zw100) + zw10_12[2] + zw1000 +
(zw1_9[array[6]-1]+zw100) + (zw1_9[array[8]-1])+ und +(zw20_90[array[7]-2]));
break;
}
//Ausnahme für 10,11,12 im Millionen Bereich
}else if(array[1]==1 && array[2]==0 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + zw10_12[0] + zw1000000 +
(zw1_9[array[3]-1]+zw100) + (zw1_9[array[5]-1])+ und +(zw20_90[array[4]-2])+ zw1000 +
(zw1_9[array[6]-1]+zw100) + (zw1_9[array[8]-1])+ und +(zw20_90[array[7]-2]));
break;
}
}else if(array[1]==1 && array[2]==1 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + zw10_12[1] + zw1000000 +
(zw1_9[array[3]-1]+zw100) + (zw1_9[array[5]-1])+ und +(zw20_90[array[4]-2])+ zw1000 +
(zw1_9[array[6]-1]+zw100) + (zw1_9[array[8]-1])+ und +(zw20_90[array[7]-2]));
break;
}
}else if(array[1]==1 && array[2]==2 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + zw10_12[2] + zw1000000 +
(zw1_9[array[3]-1]+zw100) + (zw1_9[array[5]-1])+ und +(zw20_90[array[4]-2])+ zw1000 +
(zw1_9[array[6]-1]+zw100) + (zw1_9[array[8]-1])+ und +(zw20_90[array[7]-2]));
break;
}
//Ausnahme für Hundermillionen 000...
}else if(array[1]==0 && array[2]==0 && array[3]==0 && array[4]==0 && array[5]==0 && array[6]==0 && array[7]==0 && array[8]==0 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + zw1000000 );
break;
}
//Ausnahme für Hundermillionen+10er Rest 000..
}else if(array[2]==0 && array[3]==0 && array[4]==0 && array[5]==0 && array[6]==0 && array[7]==0 && array[8]==0 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100)+(zw20_90[array[1]-2]) + zw1000000 );
break;
}
}else if(array[3]==0 && array[4]==0 && array[5]==0 && array[6]==0 && array[7]==0 && array[8]==0 ) {
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2]) + zw1000000 );
break;
}
// restliche Ausgabe
}else
for (int i=0; i < array[i]; i++) {
System.out.println((zw1_9[array[0]-1]+zw100) + (zw1_9[array[2]-1])+ und +(zw20_90[array[1]-2])+ zw1000000 +
(zw1_9[array[3]-1]+zw100) + (zw1_9[array[5]-1])+ und +(zw20_90[array[4]-2])+ zw1000 +
(zw1_9[array[6]-1]+zw100) + (zw1_9[array[8]-1])+ und +(zw20_90[array[7]-2]));
break;
}
}}
Verrenne ich mich grade in etwas oder komme ich nicht drumherum?