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!
 

tvr

Mitglied
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
 

wundidajah

Mitglied
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!
 

tvr

Mitglied
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
 

wundidajah

Mitglied
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]);
 

tvr

Mitglied
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
 
T

TryToHelp

Gast
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
 

wundidajah

Mitglied
ah okay, danke!

Leider wird nun immer die erste Eingabe (Input) sieben mal ausgegeben.
Alle anderen darauffolgenden Eingaben werden ignoriert....
 
T

TryToHelp

Gast
...
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 ;-)
 
T

TryToHelp

Gast
[EDIT]Natürlich muss das
Code:
for (int i
und nicht
Code:
 for (int ii
heißen[/EDIT]
 

wundidajah

Mitglied
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?
 
T

TryToHelp

Gast
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
}
 

wundidajah

Mitglied
: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:
 
T

TryToHelp

Gast
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 ;-)
 

ValentinMarolf

Neues Mitglied
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
 

Neue Themen


Oben