# Eingabe von Buchstaben in Zahlen umwandeln



## wundidajah (5. Nov 2012)

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:

```
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 (5. Nov 2012)

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 (5. Nov 2012)

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 (5. Nov 2012)

Du stellst die ganzen if Anweisungen in die for Schleife 

```
for(int i=0;i<=7;i++)
```
und du Speicher St den index mit

```
phonenumber[i]="2"
```
Wobei du die 2 mit der jeweiligen Zahl vertauschen musst.
Ich hoffe ich konnte dir helfen


----------



## wundidajah (5. Nov 2012)

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?


```
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 (5. Nov 2012)

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


----------



## TryToHelp (6. Nov 2012)

Du hast da bei der Idee von tvr etwas falsch verstanden.

die forschleife muss so aussehen 

```
for(int i=0;i<=7;i++)
```
und nicht so  

```
char i;
for (i=0;i<=7; i++)
```

du musst in der Schleife lesen, nicht auserhalb

außerhalb der schleife kannst du nicht das 
	
	
	
	





```
i
```
 verwenden


----------



## wundidajah (6. Nov 2012)

ah okay, danke!

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


----------



## TryToHelp (7. Nov 2012)

TryToHelp hat gesagt.:


> ...
> du musst in der Schleife lesen, nicht auserhalb
> ...




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


----------



## TryToHelp (7. Nov 2012)

[EDIT]Natürlich muss das 
	
	
	
	





```
for (int i
```
 und nicht
	
	
	
	





```
for (int ii
```
 heißen[/EDIT]


----------



## Landei (7. Nov 2012)

Die einzelnen Tests kann man zusammenfassen: [c]if ("ABC".indexOf(number) != -1) ...[/c]


----------



## wundidajah (7. Nov 2012)

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 


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

oder?


----------



## TryToHelp (7. Nov 2012)

Siehe Java Komentare

```
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 (7. Nov 2012)

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

```
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:


----------



## TryToHelp (7. Nov 2012)

Stimmt, weil ja 
	
	
	
	





```
<=
```
 drinnen steht und ich verwende üblicherweiße nur 
	
	
	
	





```
<
```
 und dann wäre es die 
	
	
	
	





```
7
```
 anstelle der 
	
	
	
	





```
6
```
 aber so geht es natürlich auch ;-)


----------



## ValentinMarolf (13. Dez 2012)

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):


```
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)


```
StringBuilder sb = new StringBuilder();
sb.append("1");
```
bzw. mit dem obigen Beispiel verknüpft

```
StringBuilder sb = new StringBuilder();
sb.append(hm.get(inputString));
```

Gruss,
Valentin


----------

