# Text zu Handy-Nummern-Eingabe



## Phil94 (15. Feb 2010)

Hi Leute ;D

Ich bin ganz neu hier im Forum und bin auch noch Schüler ^.^

Ich habe bereits die hälfte von der Hü gemacht, also den ERSTEN TEIL der HÜ ... ich komme aber bei dem 2ten BSp einfach nicht zurecht ...

Bitte könnte mir irgendwer helfen?
Also Ansätze...

Wäre sehr erfreut über Hilfe  

JAVA - AUfgabe  TEIL 2 : 

Schreiben Sie ein Programm, das zeilenweise Benutzereingaben von der Tastatur einliest.
Es d¨ urfen nur die Zeichen ’0’ bis ’9’ und ’_’ in der Eingabe vorkommen. Das
Zeichen ’_’ wird verwendet, um die Eingabe eindeutig zu machen (wenn also mehr
als 3 gleiche Zifferen aufeinanderfolgen). Bei Eingabe der Zeile "exit" beendet sich
das Programm. Jede Zeile soll entsprechend der Eingabe auf einer Handytastatur dekodiert
werden. Schreiben Sie zu diesem Zweck eine Funktion
public static String decode(String s)
die eine Zeile s entschl¨ usselt und den Klartext als String retourniert. Sollte die Zeile
nicht entschl¨ usselt werden k¨onnen (z.B. falsches Zeichen), so ist null zu retournieren.
Beispiel:
4433555_555666096667775553
hello world
2_22_222
abc
222_222
cc
222222
nicht eindeutig
exit


----------



## eRaaaa (15. Feb 2010)

Gibts Probleme beim Einlesen? Bei der Methode decode? Oder wo? Wie sieht denn dein Ansatz aus?


----------



## Phil94 (15. Feb 2010)

eRaaaa hat gesagt.:


> Gibts Probleme beim Einlesen? Bei der Methode decode? Oder wo? Wie sieht denn dein Ansatz aus?



Naja ...

Ich benütze Netbeans , und hier wollte ich mal eine HAuptklasse mit der Main erstellen ;
Dann wollte ich eben noch eine normale Java Klasse erstellen und in die wollte ich die Funktion decode reinschreiben .

Jetzt weiß ich aber leider nicht genau wie ich bzw. mit was ich anfangen soll....


----------



## Phil94 (15. Feb 2010)

Also ich habe bist jetzt zusammengebracht in der Hauptklasse :
AKTUALISIERT!


```
public class Bsp_02 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String a="";
        String b="";

        
        Scanner sc=new Scanner(System.in);
        System.out.println("SMS eingabe : ");
        b=sc.nextLine();
        System.out.format("%s",b);
        
        a=Handy.decode(b);
    }

}
```

UNd das ist die Klasse für mein Funktion decode:

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package hue_03_6;

/**
 *
 * @author Phil
 */
public class Handy {
    

}
```

Bei der Class für decode gehts eifnach nicht weiter...
Also main glaube ich stimmt soweit ,aber die Klasse für decode will mir einfahcnicht einfallen wie ich sie programmieren soll...


----------



## eRaaaa (15. Feb 2010)

Naja zunächst einmal ist es sicherlich nicht schlecht die Methodensignatur mit leerem Rumpf vllt schon einmal einzufügen in der Handy Klasse

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
package hue_03_6;
 
/**
 *
 * @author Phil
 */
public class Handy {
    
public static String decode(String s){
//dein part !
}
}
```

die decode-Methode ist sicherlich jetzt das Anspruchsvollste. Überlege dir da was. Vllt mal auf Papier aufmalen und überlegen wie du an die Sache ran gehen würdest um an den  richtigen Text heranzukommen..


----------



## pool (15. Feb 2010)

In deiner Klasse Handy solltest du nun die Methode _decode_ deklarieren, in der der String bearbeitet wird, d.h. zuerst wird er in die Teile zerlegt, die jeweils einen Buchstaben darstellen, wobei du darauf achten musst, wenn unerlaubte Zeichen kommen (dann 0 retounieren), und diese Folgen werden dann durch den zugehörigen Buchstaben ersetzt.

Um diese Zuordnung zu verwirklichen fällt mir allerdings spontan auch nichts sehr elegantes ein. Prinzipiell ginge natürlich ein Riesen-Switch, was allerdings sehr hässlich wäre. 
Alternativ könnte ich mir eine HashMap vorstellen, in der schon alle Buchstaben des Alphabets mit dem jeweiligen Zahlencode als Schlüssel liegen. Bei einer statischen Funktion ist allerdings die Frage wo die erstellt werden soll.

Wenn jemand weitere Vorschläge hat, wie man die Zuordnung verwirklicht, bin ich auch interessiert ;-)


----------



## eRaaaa (15. Feb 2010)

pool hat gesagt.:


> Alternativ könnte ich mir eine HashMap vorstellen, in der schon alle Buchstaben des Alphabets mit dem jeweiligen Zahlencode als Schlüssel liegen.


Hatte ich mir im ersten Moment auch überlegt


> Bei einer statischen Funktion ist allerdings die Frage wo die erstellt werden soll.


in einem static-Block


----------



## pool (15. Feb 2010)

eRaaaa hat gesagt.:


> in einem static-Block



Hm da kommt grad so langsam die Erinnerung... das war Code den die VM beim Laden der Klasse ausführt? Einfach in static { ... }?


----------



## eRaaaa (15. Feb 2010)

Ja : Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.6 Klassen- und Objektinitialisierung

(aber wir sollten den TO nicht verwirren! Vllt hat er ja auch eine ganz andere Idee )


----------



## pool (15. Feb 2010)

Hier schonmal ein kleiner Tipp, wie man, nachdem man rausgefunden hat wie oft eine Taste/Zahl gedrückt wurde, den entsprechenden Buchstaben findet:


```
// digit = eingelesene Zahl; count = wie oft nacheinander gedrückt, beides als int
char decoded = (char)('a' + (digit-2)*3 + count-1);
if(digit > 7) decoded++;
```

Zuvor kommt natürlich noch das Erkennen, wie oft eine Taste nacheinander gedrückt wurde, unter besonderer Berücksichtigung von "_", und dabei das Reagieren auf unerwünschte Zeichen sowie zu oft gedrückte Tasten, zudem eine gesonderte Behandlung von 0 und 1, die ja keinem Buchstaben entsprechen.


----------

