Aufspaltung

Status
Nicht offen für weitere Antworten.

Dr. Pepper

Mitglied
Hallo!

Arbeite momentan an einem kleinem Programm, das eine eingegebene Zahl in ihre einzelnen Ziffern aufteilt (zb. 422 in 4,2,2) und diese dann ausgiebt.
Beta 1.0 sieht wie folgt aus:
Code:
import java.util.Random;
import java.io.IOException;
public class Ziffernanalysator{

	String zifferZuName (int wert){
	switch (wert) {
	case 0: return"null";
	case 1: return"Eins";
	case 2: return"Zwei";
	case 3: return"Drei";
	case 4: return"Vier";
	case 5: return"Fünf";
	case 6: return"Sechs";
	case 7: return"Sieben";
	case 8: return"Acht";
	case 9: return"Neun";
	default: return "?";

}

}
public static void main (String args[]){
	int wert = Read.getInt();
	System.out.println(wert);

	Ziffernanalysator z = new Ziffernanalysator();
	System.out.println(wert+ " in Worte:" + z.zifferZuName() + " " + z.zifferZuName() +"" +z.zifferZuName());
	
}
}
Hinweis: die Read klasse bei der einlesung des int wertes, ist eine selbst programmierte klasse!
Hab momentan hier kein lauffähiges Java zum kompilieren installiert, könnte es eventuell jemand kompilieren, und die Fehler melden (und bei der ausbesserung helfen)?

Viele Grüße, und Dank im Vorraus!
 

AlArenal

Top Contributor
Und das hier wird auch nicht funzen:

Code:
System.out.println(wert+ " in Worte:" + z.zifferZuName() + " " + z.zifferZuName() +"" +z.zifferZuName());

Und wo wird da die Zahl in ihre Ziffern zerlegt? Genau, nirgends...
 
L

Leroy42

Gast
Dr. Pepper hat gesagt.:
Hab momentan hier kein lauffähiges Java zum kompilieren installiert, könnte es eventuell jemand kompilieren, und die Fehler melden (und bei der ausbesserung helfen)?

Trockenprogrammieren? Bist ja ein ganz harter :applaus:

Das hab ich zuletzt vor Urzeiten gemacht als ich Interpreter für eigene
Lisp-Programme gespielt habe, weil auf meinem Rechner kein Lisp
installiert war (Lag wohl daran, daß ich noch keinen Rechner hatte ???:L )

Die einzigen Fehler die der Compiler bemeckert sind die Aufrufe von
z.zifferZuName(), was ja logisch ist, da du keine Zahlen übergibst.

Der Ansatz, die Umwandlung in einer println-Anweisung machen zu
wollen, kann nicht funktionieren; du weißt ja noch nicht mal aus wievielen
Ziffern die eingegebene Zahl besteht.

Du brauchst zumindest eine Schleife um die einzelnen Ziffern mittels
"% 10" und "/ 10" Operationen abzutrennen. Bei einer direkten Schleife
hast du allerdings das Problem, daß die Ziffern in der falschen Reihenfolge
erzeugt werden. Deshalb würde ich vorschlagen, eine rekursive Routine zu
schreiben, die jeweils nach dem rekursiven Aufruf die aktuelle Ziffer ausgibt.
 

Dr. Pepper

Mitglied
hier die read klasse:
Code:
import java.io.*;

public class Read{ 

public static String getLine() throws IOException
{
	BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	return br.readLine();
}

public static int getInt() throws IOException, NumberFormatException

{
	return(Integer.parseInt(getLine())   );
}
public static byte getByte() throws IOException, NumberFormatException

{
	return (Byte.parseByte(getLine())  );
}

public static short getShort() throws IOException, NumberFormatException

{
	return (Short.parseShort(getLine())  );
}


public static long getLong() throws IOException, NumberFormatException

{
	return (Long.parseLong(getLine())  );
}

public static double getDouble() throws IOException, NumberFormatException

{
	return (Double.valueOf(getLine()).doubleValue());

}
public static float getFloat() throws IOException, NumberFormatException

{
	return (Float.valueOf(getLine()).floatValue());
}


}

und mit welcher methode kann ich das dann aufspalten??
 

PoiSoN

Bekanntes Mitglied
Dr. Pepper hat gesagt.:
und mit welcher methode kann ich das dann aufspalten??
Mit einer eigenen:
Leroy42 hat gesagt.:
Du brauchst zumindest eine Schleife um die einzelnen Ziffern mittels
"% 10" und "/ 10" Operationen abzutrennen. Bei einer direkten Schleife
hast du allerdings das Problem, daß die Ziffern in der falschen Reihenfolge
erzeugt werden. Deshalb würde ich vorschlagen, eine rekursive Routine zu
schreiben, die jeweils nach dem rekursiven Aufruf die aktuelle Ziffer ausgibt.
 
S

SlaterB

Gast
falls du es noch selber machen willst bisschen allgemein beschrieben

Code:
public String gibZahlstring(int x) {
   1. rechne letzte Ziffer aus sowie den Rest  (/10, % 10)
   2. wenn Rest sich sinnvoll weiterverarbeiten läßt dann gibZahlstring(Rest) aufrufen, String-Rückgabe merken
   3. String für letzte Ziffer an bisherigen String hintenanfügen und zurückgeben
}
(eine mögliche Variante)
 

AlArenal

Top Contributor
Hier wird ja wieder mit Kanonen auf Spatzen geschossen....

Einfach den int-Wert in einen String schieben und den zeichenweise durchlaufen. Aus die Maus.
 

AlArenal

Top Contributor
Code:
		String zahl = "" + 123;
		System.out.println("zahl = " + zahl);
		for (int i = 0; i < zahl.length(); i++) {
			int ziffer = Integer.parseInt("" + zahl.charAt(i)); 
			System.out.println("ziffer = " + ziffer);
		}

Das Einbauen in dein Programm sollte nicht wirklich ein Problem sein.
 

PoiSoN

Bekanntes Mitglied
Guck dir doch mal die Ausgabe an, die AlArenals Code erzeugt...
an welcher Stelle in deinem Code könnte er also sinnvollerweise stehen?
 

Dr. Pepper

Mitglied
irgendwie find ich keine sinnvolle stelle, den ich seh den bezug nicht zu der zahl die ich eingebe!
ich vermute aber das es irgendwo am ende stehen wird irgendwo im void main!?
 
L

Leroy42

Gast
Könnte es sein, daß das Programm das du gepostet hast, gar nicht
von dir ist, sondern eine Vorgabe in der du nur die println-Anweisung
selbst eingefügt hast?

Kann mir sonst unmöglich vorstellen, wie du jetzt noch Probleme hast.
 

Dr. Pepper

Mitglied
nein hab ich nicht, ist von mir.
aber bei solchen programmen wo man einen teil hinein kopiert, da verlier ich immer ein wenig den überblick
 
L

Leroy42

Gast
Naja, weil halt Feierabend ist...

Der Code von AlArenal liefert dir in der Variable ziffer für eine gegebene
Zahl schrittweise die einzelnen Ziffern. Die mußt du dann nur noch mit der
Methode zifferZuName umwandeln und da ausgeben wo in deinem Programm
die System.out.println-Methode aufgerufen wird.
 

AlArenal

Top Contributor
Dr. Pepper hat gesagt.:
bevor wir hier noch bis morgen sitzen, kannst du mir nich einfach den code zusammenkopieren?? :?:

Wenn ich das so lese kann ich auch nicht wirklich glauben, dass der gepostete Code wirklich von dir ist...

Du hast den Teller Suppe schon vor der Nase stehen. Löffeln musst du schon selber...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben