523 in Worten fünf zwei drei

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

ich, als Java Neuling hab ein Problem. Ich habe ein porgramm geschrieben was mir Zahlen in Worten sagen soll. Also z.b. 523 in Worten fünf zwei drei. Ich habe es bisher nur mit einstelligen Zahlen geschafft und bei Zahlen die höher als 10 sind hab ich probleme. Ich hoffe ihr könnt mir anhand meines codes helfen!

Code:
public class ziffern {

  public static void main (String[] args) {

  int wert=523;

  
  System.out.println(wert+" in Worten "+ZifferinWort(wert));

  }



  public static String ZifferinWort(int Ziffer){

  String Wort=" ";


   switch(Ziffer){


   case 0:Wort=" null"; break;
   case 1:Wort=" eins"; break;
   case 2:Wort=" zwei"; break;
   case 3:Wort=" drei"; break;
   case 4:Wort=" vier"; break;
   case 5:Wort=" fuenf"; break;
   case 6:Wort=" sechs"; break;
   case 7:Wort=" sieben"; break;
   case 8:Wort=" acht"; break;
   case 9:Wort=" neun"; break;
   default:Wort=" keine Ziffer!";

   }

   return Wort;
  }

}

Ich danke schonmal ion Vorraus! Gruß
 
Ich würde nicht den int übergeben, sondern die Zahl als String.
In der Methode würde ich dann mit toCharArray einen char[] erstellen und über diesen Array laufen. Die switch anweisung kannst du fast lassen und beachte, dass du in dn case fällen keine zuweisung machst sondern mit += den String hinzufügst.

Viel Spaß beim probieren 🙂
 
In etwa so...
Code:
public class ziffern { 

  public static void main (String[] args) { 

  int wert=523; 

  
  System.out.println(wert+" in Worten "+ZifferinWort(wert)); 

  } 



  public static String ZifferinWort(int Ziffer){ 

  String Wort=" "; 

Integer e=new Integer(Ziffer);
String Zahl = e.toString();

for(int z=0; z<Zahl.length();z++){
  c=Zahl.charat(z);

  int r=c;

   switch(r){ 


   case 0:Wort+=" null"; break; 
   case 1:Wort+=" eins"; break; 
   case 2:Wort+=" zwei"; break; 
   case 3:Wort+=" drei"; break; 
   case 4:Wort+=" vier"; break; 
   case 5:Wort+=" fuenf"; break; 
   case 6:Wort+=" sechs"; break; 
   case 7:Wort+=" sieben"; break; 
   case 8:Wort+=" acht"; break; 
   case 9:Wort+=" neun"; break; 
   default:Wort+=" keine Ziffer!"; 

   } 
   }
   return Wort; 
  } 

}

Ich hoffe das klappt so, ansonsten bin ich offen für Korekturen.
 
Danke erstmal für deine schnelle antwort, doch leider bin ich noch ein blutjünger anfänger 😀 und kann daher mit den quellcode nicht zu recht was anfangen kann man dies nicht einfach mit einer zweiten methode machen? Bei mir ist ja das hauptproblem, dass ich nen zweite methode schreiben will.Wie kann ich das machen, ich hatte gedacht 523%10; 523/10; 523%10... und so weiter. Weißt du da ne Lösung für??

Vielen Dank!
 
Ich hab meinen Code ausprobiert. Die Zuweisung
Code:
int r=c;
hat ärger gegeben. deshalb musste das switch dran glauben. So funktioniert es jetzt:
Code:
public class Versuch { 

  public static void main (String[] args) { 

  int wert=523; 

  
  System.out.println(wert+" in Worten "+ZifferinWort(wert)); 

  } 



  public static String ZifferinWort(int Ziffer){ 

  String Wort=" "; 

Integer e=new Integer(Ziffer); 
String Zahl = e.toString(); 

for(int z=0; z<Zahl.length();z++){ 
  char c=Zahl.charAt(z);
  

   if(c=='0')Wort+=" null"; 
   if(c=='1')Wort+=" eins";  
   if(c=='2')Wort+=" zwei";  
   if(c=='3')Wort+=" drei";  
   if(c=='4')Wort+=" vier"; ; 
   if(c=='5')Wort+=" fuenf"; 
   if(c=='6')Wort+=" sechs";  
   if(c=='7')Wort+=" sieben";  
   if(c=='8')Wort+=" acht";  
   if(c=='9')Wort+=" neun";   
   if(c != '0' && c != '1' && c != '2' && c != '3' && c != '4' &&c != '5' && c != '6' && c != '7' && c != '8' && c != '8' && c != '9') Wort +="keine Ziffer!";
   }
  
    
   return Wort; 
  } 

}

Die if abfrage für "keine Ziffer!" muss natürlich in eine Zeile :wink: Nur hier haut das nich hin...
 
Sorry, ers gepostet und dan deine Antwort gelesen :wink:

Hier nochmal mit Kommentaren:
Code:
public class Versuch { 

  public static void main (String[] args) {//deine Funktion 

  int wert=523; 

  
  System.out.println(wert+" in Worten "+ZifferinWort(wert)); 

  } 



  public static String ZifferinWort(int Ziffer){ 

  String Wort=" "; 

Integer e=new Integer(Ziffer); //Integer ist die Wrapperklasse für int. Im Konstruktor wird ein int übergeben 
//das dann mit toString() als String ausgegeben wird 
String Zahl = e.toString(); 

for(int z=0; z<Zahl.length();z++){ //for-Schleife lässt alles was drinnen steht so oft passieren wie Zahl Zeichen hat
  char c=Zahl.charAt(z);//Strig Zahl enthält zur Zeit "523", wir lassen uns Zeichen z ausgeben(als bei 
//jedem Schleifendurchlauf eins)

//Das was du als switch gemacht hattest als if

   if(c=='0')Wort+=" null";//für 0
   if(c=='1')Wort+=" eins";//für 1  
   if(c=='2')Wort+=" zwei";  //für 2
   if(c=='3')Wort+=" drei";  //für 3
   if(c=='4')Wort+=" vier"; ; //für 4
   if(c=='5')Wort+=" fuenf"; //für 5
   if(c=='6')Wort+=" sechs";  //für 6
   if(c=='7')Wort+=" sieben";  //für 7
   if(c=='8')Wort+=" acht";  //für 8
   if(c=='9')Wort+=" neun";   //für 9
//noch ne if:
//Wenn c nicht '0' und nicht '1' und nicht '2' und so weiter dann gebe keine Ziffer aus
   if(c != '0' && c != '1' && c != '2' && c != '3' && c != '4' &&c != '5' && c != '6' && c != '7' && c != '8' && c != '8' && c != '9') Wort +="keine Ziffer!";
   }
  
    
   return Wort; 
  } 

}

Du wolltest eine Lösung mit Teilen:

Das geht 523%10 ist 3 diese Zahl muss dann durch deine switch Anweisung. Dann teilst du durch 10(=52) und kanst mit der neuen Zahl von vorne Anfangen. Das ist sogar leichter als meine Lösung. Programmier das selber, als Übung :wink:
 
Du wolltest eine Lösung mit Teilen:

Das geht 523%10 ist 3 diese Zahl muss dann durch deine switch Anweisung. Dann teilst du durch 10(=52) und kanst mit der neuen Zahl von vorne Anfangen. Das ist sogar leichter als meine Lösung. Programmier das selber, als Übung

Ja so hab ich eigentlich am Anfang gedacht. Nun hab ich es mal versucht, doch leider geht es nicht ganz. Weil ich leider nicht weiß wie man die Länge von einem int macht. name.length() funktioniert nicht!? Kannst du dir vielleicht mal meinen Code angucken?? Vielleicht bin ich ja immer ncoh auf der falschen Spur.

Code:
public class ziffern {

  public static void main (String[] args) {

  int wert=523;
  
  System.out.println(wert+" in Worten"+ZifferinWort(wert));

  }

  public static String ZifferinWort(int Ziffer){

   String Wort="";
   int wort;
   
   for(int i=0;i<Ziffer.length();i=i+1){

   wort=Ziffer%10;
   
     
   switch(wort){
   

   case 0:Wort=" null"; break;
   case 1:Wort=" eins"; break;
   case 2:Wort=" zwei"; break;
   case 3:Wort=" drei"; break;
   case 4:Wort=" vier"; break;
   case 5:Wort=" fuenf"; break;
   case 6:Wort=" sechs"; break;
   case 7:Wort=" sieben"; break;
   case 8:Wort=" acht"; break;
   case 9:Wort=" neun"; break;
   case 10:Wort=" zehn"; break;
   default:Wort=" keine Ziffer!";

   }
   
   return Wort;
   wort=wort/10;
   }
  }

}

Ach, da fällt mir ein das die Zahlen verkehrt herum ausgegeben werden. also wenn die Zahl 523 das drei zwei fünf. Dies ist ein Problem, bei dem code dort oben. Irgedenwas stimmt da leidet nicht! Wäre nett wenn du/ihr mal drauf schauen könntet!

Danke

Gruß
 
mein Vorschlag:

Code:
public class Test {
	public static void main(String[] args) {
		int wert = 523;
		System.out.println(wert + " in Worten " + ZifferinWort(wert));
	}

	public static String ZifferinWort(int ziffer) {
		StringBuffer buffer = new StringBuffer();
		while (ziffer != 0) {
			switch (ziffer % 10) {
				case 0 :
					buffer.insert(0, " null");
					break;
				case 1 :
					buffer.insert(0, " eins");
					break;
				case 2 :
					buffer.insert(0, " zwei");
					break;
				case 3 :
					buffer.insert(0, " drei");
					break;
				case 4 :
					buffer.insert(0, " vier");
					break;
				case 5 :
					buffer.insert(0, " fünf");
					break;
				case 6 :
					buffer.insert(0, " sechs");
					break;
				case 7 :
					buffer.insert(0, " sieben");
					break;
				case 8 :
					buffer.insert(0, " acht");
					break;
				case 9 :
					buffer.insert(0, " neun");
					break;
				default :
					buffer.insert(0, " FEHLER");
					break;
			}
			ziffer = ziffer / 10;
		}
		return buffer.toString();
	}
}

StringBuffer ist eine String ähnliche Klasse, mit der man effizienter arbeiten kann - z.b. Strings an beliebigen Stellen (hier immer am Anfang) einfügen.

Kleiner Tipp: Variablen und methoden sollten immer mit Kleinbuchstaben beginnen !!
 
ok, danke für eure antworten, aber ne Lösung mit modulo und teilen wisst ihr auch nicht oder? Denn die ist für mich am verständlichsten. Die sind doch noch in weiter ferne, so weit bin ich noch nicht mit Java. Es wäre aber toll wenn jemand mir ne lösung mit modulo und teilen oder ne zweiter Methode geben könnte. Ich komm leider nicht drauf! Vielen Dank an euch für eure Mühe! Und schonmal danke für die nächste Lösung *schäm*.

Gruß
 
??? Was macht denn meine Methode ???

nichts anderes als Modulo: switch (ziffer % 10)
und Teilen: ziffer = ziffer / 10
 
Jo, ist mir ja klar! Mir ist das jetzt auch egal! Ich hab das jetzt letztendlich so gemacht!!
Code:
  int wert=5231;


  System.out.println(wert+" in Worten "+ZifferinWort(wert));

  }



  public static String ZifferinWort(int Ziffer){


String Wort=" ";
String Zahl = Integer.toString(Ziffer);

for (int i=0; i < Zahl.length(); i++) {
switch(Zahl.charAt(i)) {
case '0':Wort+=" null"; break;
case '1':Wort+=" eins"; break;
case '2':Wort+=" zwei"; break;
case '3':Wort+=" drei"; break;
case '4':Wort+=" vier"; break;
case '5':Wort+=" fuenf"; break;
case '6':Wort+=" sechs"; break;
case '7':Wort+=" sieben"; break;
case '8':Wort+=" acht"; break;
case '9':Wort+=" neun"; break;
default:Wort+=" keine Ziffer!";
}
}



   return Wort;
  }

}

Danke nochmal an euch!!!

gruß
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben