Text zu Morsecode

Aligator05Alivator

Neues Mitglied
Hallo, kann mir jemand sagen, warum der Abschnitt von Zeile 12 bis 16 nicht funktioniert, würde so gerne die Buchstaben aus satzNeu in Morsecode umwandeln.
String[][] codes entspricht der Morsetabelle, also Buchstabe + jeweilige Morsecode.

Java:
public static String[][] convert2Morse(String[][] codes, String satz) {
       
        //Macht Leerzeichen vorn und hinter dem Satz weg
        String satzTrim = satz.trim();
       
        char[] satzNeu = new char[satzTrim.length()];
        for(int i=0;i<satzNeu.length;i++) {
            satzNeu[i] = satzTrim.charAt(i);
        }
       
        System.out.println("\nIhr Satz in Morsecode: ");
        for(int j=0; j<satzNeu.length;j++) {
            if(satzNeu[j].equals(codes[j][0])) {    //Funktioniert nicht
                System.out.println(codes[j][1]);
            }
        }
       
        return codes;
    }
 
da codes ein string mehrfach array ist könnte auch "bob" drin stehen

wie willts du einen char mit einem char array ( string ist ein char array ) vergleichen?
 
Das das nicht funktioniert ist relativ eindeutig.

Du heißt zwei Arrays - einmal das array Satz-Neu und einmal das 2D Array codes.

Du verwendest einen Index (j) um auf Beide Arrays zuzugreifen. Das kann nicht richtig sein.

Du überprüfst, ob an der Zeichen an der Stelle 0 im Code auch an der Stelle 0 steht. Das ist mit Sicherheit (außer dein Satz ist abcdef...) nicht der Fall.

Du wirst eine weitere Schleifen brauchen in der du im Array code das Zeichen suchst, was in satzNeu an der Stelle j steht.
 
Und da dann von mir der übliche Hinweis: teile das Problem in Teilproblemen und mache Methoden, die jede nur eine Kleinigkeit macht.

Also z.B. eine Methode, die einfach ein einzelnes Zeichen in Morsecode umwandelt.
Das müsste es Dir massiv einfacher machen.
 
Wo zu brauchst du überhaupt ein 2D Array?
Ein normales würde doch reichen.

Hier ein Beispiel für die Drei Buchstaben.
Das minus 65 ist weil im ASCII Code das „A“ -> 65 ist als Char.

Füge doch die anderen Morse Codes noch ein.

Ich habe mir das Rückgeben erstmal gespart nur die aus Ausgabe auf Konsole.

ein prüfen ob es wirklich nur Buchstaben also von A-Z sind erfolgt natürlich noch nicht.
auch das Leerer Zeichen ASCII 32 wird nicht erkannt werden.
kannst du machen





Java:
    public static void main(String[] args) {
        String[] code =  {".-","-...","-.-."};    // A, B,C....
      
      
        convert2Morse(code, "BAaC");
      
    }


public static void  convert2Morse(String[] codes, String satz) {
    
        //Macht Leerzeichen vorn und hinter dem Satz weg
        String satzTrim = satz.trim();
      
        satzTrim = satzTrim.toUpperCase();
    
        char[] satzNeu = new char[satzTrim.length()];
        for(int i=0;i<satzNeu.length;i++) {
            satzNeu[i] = satzTrim.charAt(i);
        }
    
        System.out.println("\nIhr Satz in Morsecode: ");
        for(int j=0; j<satzNeu.length;j++) {
    
                System.out.println(codes[satzNeu[j]-65]);
        
        }
 
Zuletzt bearbeitet:
Warum nicht einfach eine Map - Buchstabe -> Morsezeichen? Einmal über den Satz iterieren und die Morsezeichen der Map entnehmen und einem StringBuilder hinzufügen. Warum muss immer alles mit Arrays gemacht werden?
Ja eine Map macht mehr sinn weiß nicht ob er das schon hatte. Deshalb bin ich bei seinen Arrays geblieben.
 
Warum muss immer alles mit Arrays gemacht werden?
Vermutlich, weil das Anfängeraufgaben sind, das Array wohl die einfachste Collection-artige Datenstruktur ist und der Umgang geübt werden soll.

Abgesehen davon: es geht hier um einen fixen Satz an Elementen. Dafür ist ein Array prädestiniert.

Wenn einem Platz eh egal ist, könnte man z. B. auch
Java:
String[] codes = new String['Z'+1];
codes[' '] = "   ";
codes['0'] = "-----";
codes['1'] = ".----";
// ...
codes['A'] = ".-";
codes['B'] = "-...";
codes['C'] = "-.-.";
// ...
schreiben -> poor man's map 🙂
 

Neue Themen


Zurück
Oben