Zahlenumwandlung

5c4r3

Mitglied
Hallo zusammen!
Es soll ein Programm geschrieben werden, welches nach der Eingabe einer dreistelligen Zahl diese ausschreibt.
Bsp: Eingabe: 123 -> Ausgabe: eins zwei drei.
Das ist mein Lösungsansatz, der leider kläglich scheitert, nur warum?
Muss die eingegebene Zahl abgespeichert werden, sodass ich mit der charAt-Funktion da mehrmals drauf zugreifen kann?

Java:
import java.io.*;
public class Zahlenumwandlung 
{
	public static void main(String[] args) throws IOException
	{
		int i=0, zahl;
		BufferedReader input = new BufferedReader (new InputStreamReader(System.in));
		System.out.println("Bitte dreistellige Zahl eingeben:");
		do
		{	
			zahl = input.readLine().charAt(i);
			if (zahl=='1')
				System.out.print("eins ");
				else
					if (zahl=='2')
						System.out.print("zwei ");
					else
						if (zahl=='3')
							System.out.print("drei ");
						else
							if (zahl=='4')
								System.out.print("vier ");
							else
								if (zahl=='5')
									System.out.print("fünf ");
			else
				if (zahl=='6')
					System.out.print("sechs ");
				else
					if (zahl=='7')
						System.out.print("sieben ");
					else
						if (zahl=='8')
							System.out.print("acht ");
						else
							if (zahl=='9')
								System.out.print("neun ");
							else
								if (zahl=='0')
									System.out.print("null ");
			System.out.print(i);
			i++;
		}
		while (i<=3);
	}
}
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Naja, durch readLine() willst du eben immer eine neue Zeile einlesen. Mache das außerhalb der Schleife (ohne das charAt am Ende, also nur den String) und lege das in einer String-Variablen ab, welche du dann in deiner Schleife mit charAt durchlaufen kannst, das würde gehen ja (allerdings ist deine Schleifenbedingung falsch)
 

5c4r3

Mitglied
Habs! Danke!
[JAVA=42]
import java.io.*;
public class Zahlenumwandlung
{
public static void main(String[] args) throws IOException
{
int i=0;
String zahl;
BufferedReader input = new BufferedReader (new InputStreamReader(System.in));
System.out.println("Bitte dreistellige Zahl eingeben:");
zahl = input.readLine();
do
{
char stelle = zahl.charAt(i);
if (stelle=='1')
System.out.print("eins ");
else
if (stelle=='2')
System.out.print("zwei ");
else
if (stelle=='3')
System.out.print("drei ");
else
if (stelle=='4')
System.out.print("vier ");
else
if (stelle=='5')
System.out.print("fünf ");
else
if (stelle=='6')
System.out.print("sechs ");
else
if (stelle=='7')
System.out.print("sieben ");
else
if (stelle=='8')
System.out.print("acht ");
else
if (stelle=='9')
System.out.print("neun ");
else
if (stelle=='0')
System.out.print("null ");
i++;
}
while (i<=2);
}
}

[/code]
 

XHelp

Top Contributor
Da du schon deine Lösung hast, wäre es eine Überlegung wert switch einzusetzen:
Java:
public static String numberStringToWord(String number) {
	if (number.isEmpty()) {
		return "";
	}
	String digit;
	char c = number.charAt(0);
	switch (c) {
	case '1':
		digit = "eins";
		break;
	case '2':
		digit = "zwei";
		break;
	case '3':
		digit = "drei";
		break;
	case '4':
		digit = "vier";
		break;
	case '5':
		digit = "fünf";
		break;
	case '6':
		digit = "sechs";
		break;
	case '7':
		digit = "sieben";
		break;
	case '8':
		digit = "acht";
		break;
	case '9':
		digit = "neun";
		break;
	case '0':
		digit = "null";
		break;
	default:
		digit = "_unbekanntes Zeichen_";
		break;
	}
	return digit+" "+numberStringToWord(number.substring(1));
}
 

Andi_CH

Top Contributor
Es ist übrigens durchaus üblich das wie folgt zu formatieren.

Es braucht dann nicht unbedingt zwei Bildschirme nebeneinander :)

Java:
import java.io.*;

public class Zahlenumwandlung 
{
	public static void main(String[] args) throws IOException
	{
		int i=0; 
		String zahl;
		BufferedReader input = new BufferedReader (new InputStreamReader(System.in));
		System.out.println("Bitte dreistellige Zahl eingeben:");
		zahl = input.readLine();
		do
		{   
			char stelle = zahl.charAt(i);
			if (stelle=='1')
				System.out.print("eins ");
			else if (stelle=='2')
				System.out.print("zwei ");
			else if (stelle=='3')
				System.out.print("drei ");
			else if (stelle=='4')
				System.out.print("vier ");
			else if (stelle=='5')
				System.out.print("fünf ");
			else if (stelle=='6')
				System.out.print("sechs ");
			else if (stelle=='7')
				System.out.print("sieben ");
			else if (stelle=='8')
				System.out.print("acht ");
			else if (stelle=='9')
				System.out.print("neun ");
			else if (stelle=='0')
				System.out.print("null ");
			i++;
		}
		while (i<=2);
	}
}

und das Schleifenende würde ich eher so formulieren:

Java:
		while (i<=zahl.length());
 
Zuletzt bearbeitet:

chalkbag

Bekanntes Mitglied
Alternativ, könntest du einen Enum für die einzelnen Zahlen anlegen (falls ihr das schon gelernt habt). Dann wird das ganze etwas übersichtlicher und die Ifs kannst du dir sparen, da du nur auf dein Enum castest und dann mit der entsprechenden toString Methode den zugehörigen Wert ausgeben kannst.

Grüße
 

Andi_CH

Top Contributor
Alternativ, könntest du einen Enum für die einzelnen Zahlen anlegen (falls ihr das schon gelernt habt). Dann wird das ganze etwas übersichtlicher und die Ifs kannst du dir sparen, da du nur auf dein Enum castest und dann mit der entsprechenden toString Methode den zugehörigen Wert ausgeben kannst.

Grüße
Hast du post 5 und 6 gelesen ???:L???:L???:L
 

Neue Themen


Oben