Text zu Handy-Nummern-Eingabe

Phil94

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

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
 
Zuletzt bearbeitet von einem Moderator:

Phil94

Mitglied
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

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

Java:
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:
Java:
/*
 * 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...
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Naja zunächst einmal ist es sicherlich nicht schlecht die Methodensignatur mit leerem Rumpf vllt schon einmal einzufügen in der Handy Klasse
Java:
/*
 * 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

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

pool

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

Java:
// 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.
 

Oben