Азбука Морзе на английском: тип символов не сопоставим с типом String

Я знаю, что такого рода вопросы распространены во всем StackOverFlow, но у меня есть гораздо более конкретный вопрос. В моей программе у меня есть метод main(), метод с английского на азбуку, который прекрасно работает, и метод с азбукой на азбуку, с которым у меня возникают проблемы.

public static void MorsetoString(String Morse, char [] Alphabet, String [] MorseCode){

    StringBuffer English = new StringBuffer();
    for(int i=0;i < Morse.length(); i++){
        if (Morse.charAt(i) != ' '){
                for (int j = 0; j < MorseCode.length; j ++){
                    if (Morse.charAt(i) == MorseCode[j]){
                        English.append(MorseCode[j]);
                        English.append(" ");
                    }
                }
        }

    }



}

Это массивы, которые принимаются в качестве аргументов в этом методе:

char Alphabet [] = {'a','b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '};
String MorseCode [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "..-", ".--", "-..-", "-.--", "--..", "|"};

Код не полностью сделан, так как я должен добавить оператор, когда Morse.charAt(i) == ' ', но у меня в основном проблемы с этой порцией.

Проблема с этим кодом в том, что когда я говорю if (Morse.charAt(i) == MorseCode[j])Я сравниваю переменную типа char с строковым типом, поэтому программа не компилируется. Я думаю, что мой код работает в целом с точки зрения логики, но есть ли способ, которым я могу изменить код, чтобы их можно было сравнить? Точное сообщение об ошибке "

1 ответ

Решение

Вам не нужно сравнивать каждый символ входной строки. Сравните только когда вы получите место ' ', потому что пробел делит символы в азбуке Морзе:

static char alphabet[] = {'a','b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '};
static String morseCode[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "..-", ".--", "-..-", "-.--", "--..", "|"};

public static void decodeMorse(String morse){
    StringBuilder english = new StringBuilder();

    int codeLength = 0;
    for(int i=0; i<morse.length();i++){

        String code = null;
        // if we met ' ', we can get previous code
        if(morse.charAt(i)==' ' && codeLength>0){
            code = morse.substring(i-codeLength, i);
            codeLength=0;
        }else
        // when we reached end of string we have to get previous code
        if(i==morse.length()-1 && codeLength>0){
            code = morse.substring(i-codeLength, morse.length());
        }
        else{
            codeLength++;
        }

        // if you got the code, find alphabet char for it
        if(code!=null){
            for(int j=0; j<alphabet.length; j++){
                if(code.equals(morseCode[j])){
                    english.append(alphabet[j]);
                }
            }
        }

    }

    System.out.println(english);
}

Кроме того, вам не нужно добавлять пробелы между символами алфавита, потому что в английском не нужны пробелы между буквами.

Другие вопросы по тегам