Eingabe von Buchstaben in Zahlen umwandeln

wundidajah

Mitglied
Hallo,

wie der Titel besagt, soll ich Buchstaben in Zahlen umwandeln.

ABC ............................................................................ 2
DEF ............................................................................ 3
GHI ............................................................................. 4
JKL ............................................................................. 5
MNO .......................................................................... 6
PQRS .......................................................................... 7
TUV ............................................................................ 8
WXYZ ........................................................................ 9

Ich habe zuerst versucht,eine Bedingung aufzustellen, damit nur A-Z eingeben werden kann,
bzw. wollte ich die Werte in ein Array speichern. Beides funktioniert nur fehlerhaft oder gar nicht.
Eigentlich sollten nur genau 7 Buchstaben abgefragt werden, das wollt ich noch mit einer Zählschleife lösen...

Das ist bis jetzt meine Idee:
Java:
char number;
	
	System.out.print("Input: ");
	number = Input.read();
	 
	
	String[] phonenumber = new String[7];
	
	
	while (number < 'A' || 'Z' < number || number == ' ')  {
      System.out.println("Please enter a valid capital letter.");
        number = Input.read();
		} 
		
		
	if  (number == 'A' | number == 'B' | number == 'C')
		
		phonenumber[0] = "2";
		
		
	if  (number == 'D' | number == 'E' | number == 'F')
		
		phonenumber[1] = "3";
		
	if (number == 'G' || number == 'H' || number == 'I')
		
		phonenumber[2] = "4";
	
	
	if (number == 'J' || number == 'K' || number == 'L')
		
		phonenumber[3] = "5";
	
	
	if (number == 'M' || number == 'N' || number == 'O')
		
		phonenumber[4] = "6";
	
	
	if (number == 'P' || number == 'Q' || number == 'R' || number == 'S')
		
		phonenumber[5] = "7";
	
	
	if (number == 'T' || number == 'U' || number == 'V')
		
		phonenumber[6] = "8";
	
	
	if (number == 'W' || number == 'X' || number == 'Y' || number == 'Z')
		
		phonenumber[7] = "9";
	
	System.out.println("Output: " +phonenumber[0] +phonenumber[1] +phonenumber[2] +phonenumber[3] +phonenumber[4] +phonenumber[5] +phonenumber[6] +phonenumber[7]);
	number = Input.read();



Vielleicht hat jemand einen Tipp...danke!
 
Ich bin mir nicht ganz sicher ob du das mit dem abspeichern der Eingaben so meinst,
So bekommst du am Ende nachdem 7 zahlen eingegeben wurden nur im besten Fall 7 zahlen in deinen array
Und zwar 23456789 in der reihenfolge
Ich würde in einer for Schleife das ganze 7mal durchgehen und jeweils die Zahl in den jeweiligen index speichern
 
Mit For-Schleifen hab ich noch nichts gemacht. Die Struktur kenn ich.
Ich lass die for Schleife 7 mal durchlaufen und in die Anweisung kommen die If Abfragen.
Nur wie speichert ich in den Index? Einfach aufaddieren und einen String ausgeben lassen?

Danke!
 
Du stellst die ganzen if Anweisungen in die for Schleife
Code:
for(int i=0;i<=7;i++)
und du Speicher St den index mit
Code:
phonenumber[i]="2"
Wobei du die 2 mit der jeweiligen Zahl vertauschen musst.
Ich hoffe ich konnte dir helfen
 
hmmm, irgendwie liest er die Werte nicht ein. Ausgabe ist immer "null"...
Kann ich nicht die Werte in die Variable i einlesen und als Stream ausgeben?

Java:
char number;
	
	System.out.print("Input: ");
	number = Input.read();
	char i;
	
	
	String[] phonenumber = new String[9];

		
	for (i=0;i<=7; i++){
	
	if  (number == 'A' | number == 'B' | number == 'C')
		
		phonenumber[i] = "2";
		
		
	if  (number == 'D' | number == 'E' | number == 'F')
		
		phonenumber[i] = "3";
		
	if (number == 'G' || number == 'H' || number == 'I')
		
		phonenumber[i] = "4";
	
	
	if (number == 'J' || number == 'K' || number == 'L')
		
		phonenumber[i] = "5";
	
	
	if (number == 'M' || number == 'N' || number == 'O')
		
		phonenumber[i] = "6";
	
	
	if (number == 'P' || number == 'Q' || number == 'R' || number == 'S')
		
		phonenumber[i] = "7";
	
	
	if (number == 'T' || number == 'U' || number == 'V')
		
		phonenumber[i] = "8";
	
	
	if (number == 'W' || number == 'X' || number == 'Y' || number == 'Z')
		
		phonenumber[i] = "9";
	}
	
	System.out.println("Output: " +phonenumber[i]);
 
Das könnte daran liegen, dass der Befehl di etwas falsches ausgibt, dass i als char und nicht als int definiert ist, oder dass die Ausgabe außerhalb der Schleife steht
 
Du hast da bei der Idee von tvr etwas falsch verstanden.

die forschleife muss so aussehen
Java:
for(int i=0;i<=7;i++)
und nicht so
Java:
char i;
for (i=0;i<=7; i++)

du musst in der Schleife lesen, nicht auserhalb

außerhalb der schleife kannst du nicht das
Code:
i
verwenden
 
ah okay, danke!

Leider wird nun immer die erste Eingabe (Input) sieben mal ausgegeben.
Alle anderen darauffolgenden Eingaben werden ignoriert....
 
...
du musst in der Schleife lesen, nicht auserhalb
...

Java:
char number;
String[] phonenumber = new String[7];    
for (int ii=0;i<=7; i++){
   System.out.print("Input: ");
   number = Input.read(); 
   if  (number == 'A' | number == 'B' | number == 'C'){
        phonenumber[i] = "2";}
   // ...
}

ALSO WIE IM LETZEN POST VON MIR GESCHRIEBEN

weil so wie du es gemacht hast, hast du ein mal gelesen und sieben mal ausgewertet, aber du willst ja sieben mal lesen und sieben mal auswerten ;-)
 
[EDIT]Natürlich muss das
Code:
for (int i
und nicht
Code:
 for (int ii
heißen[/EDIT]
 
Danke für die ganzen Tipps, aber leider funkt. das noch immer nicht ganz.
Die richtige Ausgabe wird erkannt, aber er gibt nun auch sieben mal den Input aus...

Input:AD
2Input: 3Input

usw.

gewünscht wäre:
z.B.
Input: ABCDEFG
Output:2223334

Also brauch ich noch eine eigene Abfrage/Schleife für

Java:
System.out.print("Input: ");
   number = Input.read();

oder?
 
Siehe Java Komentare
Java:
char number;
String[] phonenumber = new String[7];
System.out.print("Input: "); // Setze diese Ausgabe vor die Schleife   
for (int i=0;i<=7; i++){
   number = Input.read(); 
   if  (number == 'A' | number == 'B' | number == 'C'){
        phonenumber[i] = "2";}
   // ...
}// Die Ausgabe aus dieser schleife raus nehmen
System.out.println(""); //Neue Zeile
System.out.print("Output: "); // Ebenso wie bei der Eingabe vor der Schleife
for (int i=0;i<=7; i++){
   System.out.print(phonenumber[i]); //Durch dein Array gehen und ausgeben
}
 
:toll: Code funkt, danke. Hatte anfangs noch folgenden Laufzeitfehler:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7

Da wir ja von null wegzählen, musste ich noch die for Schleife ändern:
Java:
for (int i=0;i<=6; i++)

Somit passts! Super, vielen Dank!

Jetzt muss ich mir nur noch Gedanken machen, dass in die Schleife nur Großbuchstaben rein kommen. :rtfm:
 
Stimmt, weil ja
Code:
<=
drinnen steht und ich verwende üblicherweiße nur
Code:
<
und dann wäre es die
Code:
7
anstelle der
Code:
6
aber so geht es natürlich auch ;-)
 
Hier noch zwei kleine Denkanstösse

a) Du könntest die Umwandlung (das Mapping) auch mit Hilfe einer Hashmap lösen (die sind ganz praktisch für solche assoziative Arrays):

Java:
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("A", "1");
hm.put("B", "2");
	    
String inputString = new String("B");
String outputString = hm.get(inputString);
	    
System.out.println(outputString);

b) Für das Zusammenhängen der einzelnen Strings würde ich mir den Einsatz eines Stringbuffers oder bzw. Stringbuilders überlegen (je nach dem, ob du threadsafe sein musst oder nicht)

Java:
StringBuilder sb = new StringBuilder();
sb.append("1");
bzw. mit dem obigen Beispiel verknüpft
Java:
StringBuilder sb = new StringBuilder();
sb.append(hm.get(inputString));

Gruss,
Valentin
 

Zurück
Oben