Преобразование буквы в азбуку Морзе работает только для одной буквы каждый прогон - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь вывести азбуку Морзе. В настоящее время я сопоставляю введенное письмо с соответствующей буквой азбуки Морзе. У меня проблема в том, что после ввода одной буквы, следующие буквы не будут выводиться.

Мой код указан ниже:

public class Example {

    public static void main(String[] args) {
        Map<String, String> map = createAlphabet();
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();

        for (Map.Entry<String , String> entry : map.entrySet()){
            if (entry.getKey().equalsIgnoreCase(s)){
                System.out.println(entry.getValue());
            }
        }

    }

    public static Map<String , String> createAlphabet() {
        Map<String , String> alphabet = new HashMap<>();

        alphabet.put("A" , ".-");
        alphabet.put("B" , "-...");
        alphabet.put("C" , "-.-");
        alphabet.put("D" , "-..");
        alphabet.put("E" , ".");
        alphabet.put("F" , "..-.");
        alphabet.put("G" , "--.");
        alphabet.put("H" , "....");
        alphabet.put("I" , "..");
        alphabet.put("J" , ".---");
        alphabet.put("K" , "-.-");
        alphabet.put("L" , ".-..");
        alphabet.put("M" , "--");
        alphabet.put("N" , "-.");
        alphabet.put("O" , "---");
        alphabet.put("P" , ".--");
        alphabet.put("Q" , "--.-");
        alphabet.put("R" , ".-.");
        alphabet.put("S" , "...");
        alphabet.put("T" , "-");
        alphabet.put("U" , "..-");
        alphabet.put("V" , "...-");
        alphabet.put("W" , ".--");
        alphabet.put("X" , "-..-");
        alphabet.put("Y" , "-.--");
        alphabet.put("Z" , "--..");


        return alphabet;
    }
}

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 января 2019

Он будет читать только одно значение, так как этот код выполняется один раз, и вы не получите письмо, например, если передаете слово.

Вы набираете 'D', и оно будет печататься "-.. ", потому что это один символ, но если вы наберете" HELLO ", он не будет печатать полное слово, потому что вам нужно разделить на символы и печатать его один за другим.

Если вы измените цикл наэто, он будет делать то, что вы хотите:

for (Map.Entry<String , String> entry : map.entrySet()){
        for(int i = 0; i<s.length(); i++){
            if (entry.getKey().equalsIgnoreCase(String.valueOf(s.charAt(i)))){
                System.out.print(entry.getValue() + " ");
            }
        }
    }

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

public static void main(String[] args) {
    Map<String, String> map = createAlphabet();
    Scanner in = new Scanner(System.in);
    String s = in.nextLine();
    while(!s.equals(".")){
        for (Map.Entry<String , String> entry : map.entrySet()){
            for(int i = 0; i<s.length(); i++){
                if (entry.getKey().equalsIgnoreCase(String.valueOf(s.charAt(i)))){
                    System.out.print(entry.getValue() + " ");
                }
            }

        }
        System.out.println();
        s = in.nextLine();
        System.out.println();
    }

}

Редактировать

По предложению @Stephen CI изменил код на этот

public static void main(String[] args) {
        Map<String, String> map = createAlphabet();
        Scanner in = new Scanner(System.in);
        String s = in.nextLine().toUpperCase();
        while (!s.equals(".")) {
            for (int i = 0; i < s.length(); i++) {
                System.out.print(map.get((String.valueOf(s.charAt(i))))+ " ");
            }
            System.out.println();
            s = in.nextLine().toUpperCase();
            System.out.println();
        }

    }

Бессмысленно использовать для, когда у вас есть get() метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...