Android Theorie: Umwandeln von Text in Morsecode

L0g4n

Mitglied
Hey Leute,

ich will auf Android normalen Text in Morsecode "umwandeln" lassen.
D.h. jmd. schreibt normalen Text in ein Feld, im anderen Feld wird der fertige dementsprechende Morsecode dazu ausgespuckt.

Ich weiß, dass ich dazu das Morsealphabet als Ressource irgendwo speichern soll.
Meine Idee wäre, das ganze einfach als String Array anzulegen, und dann mit den entsprechenden Symbolen zu füllen.

Da ich noch Anfänger bin, wollte ich nur fragen, ob das so in Ordnung ist und auch empfehlenswert ist, oder ob es noch einen anderen, vielleicht leichteren Weg gibt.

Danke im Voraus!

LG
 
Ich denke, ein String-Array passt ziemlich gut. Die Länge des Morse-Alphabets ist definiert und terminiert, d.h., da "ändert sich nichts". Somit darfst du es (m.M.n.) auch fix in den Code einprogrammieren.
 
Okay, danke für deine Antwort!
So hatte ich mir das ganze auch gedacht, da das ganze ja "fix" ist, lohnt sich eine Datenbank o.Ä.
hier nicht.

LG
 
Hallo,

danke für deine Antwort. Wie gesagt, bin ich noch Anfänger, könntest du mir vielleicht erklären, wie ich das auf mein Beispiel oben anwenden kann ?

LG
 
Ein
Code:
String[]
macht eine
Code:
int => String
Zuordnung. Dann müsstest du jedes Zeichen aus dem Eingabefeld erst in einen int umrechnen was bei komischen Zeichen (solche, die das Morse-Alphabet nicht kennt, etwa $ oder }) schnell zu Problemen führt.
Eine HashMap kann dir eine
Code:
Character => String
Zuordnung bereitstellen. Dann musst du nornoch für jeden
Code:
char
in deinem Eingabefeld prüfen, ob er in der HashMap ist und ggf. eine Meldung ausgeben, wenn er es nicht ist.

Siehe dafür diese Links:
[JAPI]java.lang.String#toCharArray()[/JAPI]
[JAPI]java.lang.Character[/JAPI]
[JAPI]java.util.HashMap[/JAPI]
Lesson: Generics (Updated) (The Java™ Tutorials > Learning the Java Language)
 
Hmm, verstehe, das ganze ist dann also so etwas in der Art wie ein assotiatives Array in PHP.
Jetzt gibt es natürlich nur das Problem, wenn ich so eine HashMap mit dem Morsealphabet anlege, dass gleich in 3 Activitys von mir gleichzeitig bereit stehen muss. Jedoch will ich das nicht in jeder Activity neu deklarieren.

Weißt du, wie ich dieses Problem lösen kann ?

LG
 
Hmm, verstehe, das ganze ist dann also so etwas in der Art wie ein assotiatives Array in PHP.
So ziemlich das selbe, ja. Ein PHP-Array ist PHP-Intern das selbe wie eine
Code:
HashMap<Object,Object>
.

Jetzt gibt es natürlich nur das Problem, wenn ich so eine HashMap mit dem Morsealphabet anlege, dass gleich in 3 Activitys von mir gleichzeitig bereit stehen muss. Jedoch will ich das nicht in jeder Activity neu deklarieren.

Weißt du, wie ich dieses Problem lösen kann ?

Globale Variablen sind eigentlich Bad-practice in Java. Aber alle anderen Möglichkeiten für solche Belange sind auch nicht gerade elegant. Deshalb lege ich meisst eine Klasse namens
Code:
Resources
an die alle Daten lädt, die an vielen Stellen gebraucht werden (Sprachdateien, Icons usw):
Java:
package resources;

public abstract class Resources
{
    public static final HashMap<String,String> MORSE_ALPHABET = new HashMap<String,String>();

    static
    {
        MORSE_ALPHABET.put(...);
        ...
    }
}
 
Zuletzt bearbeitet:
Wobei die Einteilung in ein String-Array nach Schema (Buchstabennr.)->(wert) nicht kreuzfalsch sein wird. A=0, b=1, c=2, ...

Sicherlich nicht, sie ist sogar performanter und braucht nicht halb so viel Speicher im RAM. Aber das umrechnen der ANSII-Werte in passende Indexe für das Array (sodass keine Kollisionen oder ArrayIndexOutOfBounds auftreten) hab ich unserem "Anfänger" nicht aus dem Stehgreiff zugemutet.
 
Danke,

kannst du mir nochmals sagen, wofür der static { } Abschnitt in der Abstrakten Klasse steht ?
Ich wusste es mal, bin mir aber nicht mehr sicher, ist das nicht so was wie eine Art "Konstruktor" ?

LG
 
Zuletzt bearbeitet:
Nein, ein Konstruktor ist es nicht. Der Code im
Code:
static {}
-Block wird ausgeführt, wenn die Klasse in die JVM geladen wird. Genauer: Nachdem die static-variablen initialisiert wurden.
 
Hallo,

warum nicht als eigene public static class? Dann die HashMap oder was auch immer als static member und noch statische Methoden zum umrechnen?
Dann geht die HashMap auch als private, wenn man sich die Klasse um die Codierung kümmert.

Gruß
 
Hallo,

nochmals eine Frage, da ich noch ein Problem habe.
Wenn ich nun das ganze ausgebe ist das vollkommen unsortiert, d.h. nicht mehr in der Reihenfolge, in der ich es eigentlich hinzugefügt habe (chronologisch, von A bis Z, 0 - 9).

In der API Dokumentation von HashMap habe ich keine Methode zum Sortieren gefunden.

Weiß jemand, wie ich das ganze wieder sortieren kann ?

LG
 

Neue Themen


Zurück
Oben