Zahlenausgabe- bräuchte einen Tipp

Status
Nicht offen für weitere Antworten.

maddin86

Mitglied
Hallo,

das Programm soll. wenn über die Kommandozeile z.B. "java Zahlenausgabe 55 20" eingegeben wird folgendes ausgeben:

"55 - fuenfundfuenfzig
20 - zwanzig".

Wie zerteile ich denn den String im array args "55" in n=5 und m=5 ?

Könntet ihr mir da mal auf die Sprünge helfen? Bin noch ziemlich planlos in Java 😳

Java:
import EAjava.*;

public class Zahlenausgabe
{
 public static void main (String[] args)
 {
 // Variablendeklarationen
 String[] einer = new String[9];
 String[] zehner = new String[8];
 int i,
     j = args.length-1,
     n = 0,
     m = 0;
 
 // Füllen der Arrays
 einer[0] = "ein";
 einer[1] = "zwei";
 einer[2] = "drei";
 einer[3] = "vier";
 einer[4] = "fuenf";
 einer[5] = "sechs";
 einer[6] = "sieben";
 einer[7] = "acht";
 einer[8] = "neun";
 
 zehner[0] = "zwanzig";
 zehner[1] = "dreisig";
 zehner[2] = "vierzig";
 zehner[3] = "fuenfzig";
 zehner[4] = "sechzig";
 zehner[5] = "siebzig";
 zehner[6] = "achtzig";
 zehner[7] = "neunzig";
 
 for (i=0; i<=j; i++)
     {
     n = (int) args[i];
     m = (int) args[i];
     System.out.println(args[i] + " - " + einer[n] + "und" + zehner[m]);
     }
 }

}
 
Java:
n = (int) args[i];
m = (int) args[i];
Das kriegst Du doch garnicht kompiliert und selbst wenn wäre ja m==n.
Einzelne Zeichen eines Strings kann man mit charAt(int i) auslesen.
Ich würde aber die Strings zuerst komplett in echte zahlen umwandlen und dann weiterbearbeiten. Etwa so:
Java:
public class Zahlenausgabe {
	private String[] einer;
	private String[] zehner;
	
	public Zahlenausgabe() {
		einer = new String[] {"ein", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun"};
		zehner = new String[] {"zwanzig", "dreisig", "vierzig", "fuenfzig", "sechzig", "siebzig", "achtzig", "neunzig"};
	}
	
	public void schreibeZahlen(String[] zahlenString) {
		for (int i=0; i<zahlenString.length; i++) {
			int zahl = Integer.valueOf(zahlenString[i]).intValue();
			for (int n=0; n<=(zahl/10)+1; n++) {
				//Hier kannst Du z.B. so die einzeln Ziffern ermitteln und weiterverarbeiten;
				System.out.print(zahl%10 + ",");
				zahl = zahl/10;
			}
			System.out.println();
		}
	}
	
	public static void main (String[] args) {
		Zahlenausgabe zAusgabe = new Zahlenausgabe();
		if (args.length==0) {
			zAusgabe.schreibeZahlen(new String[] {"20", "13"});
		}
		else {
			zAusgabe.schreibeZahlen(args);
		}
	}
}
Achso, und diese zeilenlange Befüllen der Felder kann man abkürzen (siehe Konstruktor)
 
Zuletzt bearbeitet:
Die Kommentare sollten das Programm soweit mal erklären
(1) Also deine Ziele sind jetzt, das ganze mittels einem Algorithmus zu realisieren, wichtig dafür sind die Zusammenhänge was sich pro Stelle wie verändert z.B. zwischen 3 und 4 stellig
(2) Ausnahmen wie Zahlen die mit 0 enden wie 50 einbauen
(3) z.B. siebenundsibzig hierbei ist es wichtig, zu beachten an welcher Stelle man die 7 einsetzt und so auch die sieben zu sib abkürzt, denkansatz: eine public String getNumber(int zahl, String Stelle, int length) die dir jeweils die richtig ab oder auch nicht abgekürzte Zahl zurückgibt. Viel Erfolg!

PS: Wenn jemand eine bessere/effizientere Methode kennt einfach den Post ignorieren, und bitte beachten das ich absichtlich Zahlen "per Hand" zerlege und nicht die Stellen errechnen lasse. 🙂

Java:
public class asdfsdf 
{
	public static void main(String[] args) 
	{
		//Zerlegung in Einer, Zehner,...stelle
		
		//Beispiele
		String a = "5";
		String b = "51";
		String c = "987";
		String d = "1234";
		
		//Zerlegung in int
		int aa = Integer.parseInt(a);
		int bb = Integer.parseInt(b);
		int cc = Integer.parseInt(c);
		int dd = Integer.parseInt(d);
		
		//Wenn 1 stellig:
		if(aa<10)
		{
			System.out.println(aa);
			System.out.println("Einerstelle " + aa);
		}
		//Wenn 2 stellig:
		if(bb>9 && bb < 100)
		{
			System.out.println(bb);
			System.out.println("Einerstelle " + (bb%10));
			System.out.println("Zehnerstelle " + (bb/10));
		}
		//Wenn 3 stellig:
		if(cc>99 && cc < 1000)
		{
			System.out.println(cc);
			System.out.println("Einerstelle " + (cc%10));
			System.out.println("Zehnerstelle " + (cc/10%10));
			System.out.println("Hunderterstelle " + (cc/100));
		}
		//Wenn 4 stellig:
		if(dd>999 && dd < 10000)
		{
			System.out.println(dd);
			System.out.println("Einerstelle " + (dd%10));
			System.out.println("Zehnerstelle " + (dd/100%10));
			System.out.println("Hunderterstelle " + (dd/10%10));
			System.out.println("Tausenderstelle " + (dd/1000));
		}
		
		//Wenn 1 stellig:
		if(aa<10)
		{
			System.out.println(aa);
			System.out.println("5");
		}
		//Wenn 2 stellig:
		if(bb>9 && bb < 100)
		{
			System.out.println(bb);
			//ES ZS
			System.out.println((bb%10)+"und"+(bb/10)+"zig");
		}
		//Wenn 3 stellig:
		if(cc>99 && cc < 1000)
		{
			System.out.println(cc);
			//HS ES ZS
			System.out.println((cc/100)+"hundert"+(cc/10%10)+"und"+(cc%10)+"zig");
		}
		//Wenn 4 stellig:
		if(dd>999 && dd < 10000)
		{
			System.out.println(dd);
			//TS HS ZS ES
			System.out.println((dd/1000)+"tausend"+(dd/100%10)+"hundert"+(dd%10)+"und"+(dd/10%10)+"zig");
		}
	}
	
	public String getNumber(int zahl, String Stelle, int length)
	{
		//...
		//@return die silbe Sib / Sieben z.B.
	}
}
 
Danke schonmal, werde ich später mal ausprobieren wie weit ich damit komme!

Was ich vergessen hatte zu erwähnen, das ganze muss nur zwischen 20 und 99 funktionieren, kleinere/größere zahlen kommen nicht in betracht.

Danke für den Hinweis zum befüllen des Arrays.. das mir das nicht selbst eingefallen ist 😳
 
Was ich vergessen hatte zu erwähnen, das ganze muss nur zwischen 20 und 99 funktionieren, kleinere/größere zahlen kommen nicht in betracht.

Joa, ist ja kein Problem. Dann machste vorher ne Abfrage und wenn die Zahl außerhalb deines erlaubten Bereichs liegt, gibst du nicht eine Zahl aus, sondern irgendeinen beliebigen Text.
 
dann ists ja net so schwer
Java:
public class MapTest {
    private static final String ZWANZIG = "zwanzig";
    private static final String[] ELEMENTS = {"zig", "ein", "zwei", "drei", "vier", "fuenf",
            "sechs", "sieben", "acht", "neun"};

    public static void main(String[] args) {
        for (String each : args) {
            int number = Integer.parseInt(each);
            int einser = number % 10;
            int zehner = number / 10;

            String text = "";
            if (zehner == 2) {
                text = einser == 0 ? ZWANZIG : ELEMENTS[einser] + "und" + ZWANZIG;
            }
            else if (einser == 0) {
                text = ELEMENTS[zehner] + ELEMENTS[0];
            }
            else {
                text = ELEMENTS[einser] + "und" + ELEMENTS[zehner] + ELEMENTS[0];
            }
            System.out.println(text);
        }
    }
}

der 20er bereich bedarf halt extra behandlung da er nicht der namenskonvention folgt...
 
habe es nun wie folgt gemacht, läuft ganz gut, habt ihr noch verbesserungsvorschläge??

Java:
//Zahlenausgabe
import EAjava.*;

public class Zahlenausgabe
{
        public static void main (String[] args)
        {
        // Variablendeklarationen
        String[] einer = new String[] {"ein", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun"};
        String[] zehner = new String[]{"zwanzig", "dreisig", "vierzig", "fuenfzig", "sechzig", "siebzig", "achtzig", "neunzig"};
        int i,
        j = args.length-1,
        zahl = 0,
        erste = 0,
        zweite = 0;

        // Ausgabe
        System.out.println("");
        System.out.println("Die Zahlen lauten:");
        System.out.println("");

        // Ausgabe der Zahlen
        for (i=0; i<=j; i++)
                {
                zahl = Integer.valueOf(args[i]).intValue(); //Werte des Strings in Integer wandeln

                if (zahl < 20 ^ zahl > 99) //Kontrolle ob 19 < Zahl < 100
                        {
                        System.out.println("Die Zahl ist groesser 99 oder kleiner 20.");
                        }
                else
                        {
                        erste = (zahl/10);
                        zweite = (zahl%10);

                        if (zweite == 0) //Kontrolle ob die Zahl eine Einerstelle ungleich 0 hat
                                {
                                System.out.println(args[i] + " - " + zehner[erste-2]); //Ausgabe von Vielfachen von 10
                                }
                        else
                                {
                                System.out.println(args[i] + " - " + einer[zweite-1] + "und" + zehner[erste-2]); //Ausgabe aller anderen Zahlen
                                }
                        }
                }
        }
}
 
Zuletzt bearbeitet:
eine frage hätte ich noch, ist zwar etwas OT aber egal:

Wenn ich die boolsche variable "nachlinks" durch eine tastaturabfrage auf true bzw. false setzen möchte, wie mache ich das genau?? so wie ich es versucht habe geht es nicht ganz:

Java:
                lire = konsole.readString("Nach links oder nach rechts?: (l/r) ");
                System.out.println("");
                if (lire == "l")
                   {
                   nachlinks = true;
                   }
                else
                    {
                    nachlinks = false;
                    }
 
wenn schon
Java:
if ("l".equals(lire))
ansonsten kannst du auch gleich folgendes schreiben
Java:
nachlinks = "l".equals(lire);
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben