【问题标题】:Morse Code Translator with HashMaps in JavaJava 中带有 HashMaps 的摩尔斯电码翻译器
【发布时间】:2014-08-08 04:44:40
【问题描述】:

我确实意识到有人问过这个问题,我已经通过他们搜索寻求帮助。我正在尝试编写一个摩尔斯电码翻译器。可以翻译字母和数字;我已经使用 HashMap 让英语到莫尔斯语完美地工作。谷歌大神告诉我,我可以颠倒 hashmap 的顺序以获得莫尔斯到英文的翻译,但我画的是空白。

我正在寻找一种在摩尔斯电码中输入字符串(包括空格)并获得英文翻译(包括数字)的方法?

import java.util.*;

public class Project {
    public static void main(String[] args) {
        getInput();
    }

    public static void getInput() {
        char a;
        a = Input.getChar("Enter m for Morse to English or e for English to Morse.");
        if (a == 'm')
            translateMorse();
        else if (a == 'e')
            translateEnglish();
        else 
            System.out.println("Your input is not valid.");
    }

    public static void translateEnglish() {
        String englishToMorse = Input.getString("Enter a phrase in English.");
        englishToMorse = englishToMorse.toLowerCase();

        int i = 0;

        while(i <englishToMorse.length()) {
            Map<Character, String> morse = new HashMap<Character, String>();
            morse.put('a', ".-");
            morse.put('b', "-...");
            morse.put('c',  "-.-");
            morse.put('d',  "-..");
            morse.put('e',    ".");
            morse.put('f', "..-.");
            morse.put('g',  "--.");
            morse.put('h', "....");
            morse.put('i',   "..");
            morse.put('j', ".---");
            morse.put('k',   "-.");
            morse.put('l', ".-..");
            morse.put('m',   "--");
            morse.put('n',   "-.");
            morse.put('o',  "---");
            morse.put('p', ".--.");
            morse.put('q', "--.-");
            morse.put('r', ".-.");
            morse.put('s',  "...");
            morse.put('t',   "-");
            morse.put('u',  "..-");
            morse.put('v', "...-");
            morse.put('w',  ".--");
            morse.put('x', "-..-");
            morse.put('y', "-.--");
            morse.put('z', "--..");
            morse.put('1', ".----");
            morse.put('2',"..---");
            morse.put('3', "...--");
            morse.put('4', "....-");
            morse.put('5', ".....");
            morse.put('6', "-....");
            morse.put('7', "--...");
            morse.put('8', "---..");
            morse.put('9', "----.");
            morse.put('0', "-----");
            System.out.print(morse.get(englishToMorse.charAt(i)));
            i++;
        }
    }

    public static void translateMorse() {  
        String morseToEnglish = Input.getString("Enter a phrase in Morse Code.");
        morseToEnglish = morseToEnglish.toLowerCase();

        int i = 0;
        while(i < morseToEnglish.length() ) {
            HashMap<Character, String> morse = new HashMap<>();
            morse.put('a', ".-");
            morse.put('b', "-...");
            morse.put('c',  "-.-");
            morse.put('d',  "-..");
            morse.put('e',    ".");
            morse.put('f', "..-.");
            morse.put('g',  "--.");
            morse.put('h', "....");
            morse.put('i',   "..");
            morse.put('j', ".---");
            morse.put('k',   "-.");
            morse.put('l', ".-..");
            morse.put('m',   "--");
            morse.put('n',   "-.");
            morse.put('o',  "---");
            morse.put('p', ".--.");
            morse.put('q', "--.-");
            morse.put('r', ".-.");
            morse.put('s',  "...");
            morse.put('t',   "-");
            morse.put('u',  "..-");
            morse.put('v', "...-");
            morse.put('w',  ".--");
            morse.put('x', "-..-");
            morse.put('y', "-.--");
            morse.put('z', "--..");
            morse.put('1', ".----");
            morse.put('2',"..---");
            morse.put('3', "...--");
            morse.put('4', "....-");
            morse.put('5', ".....");
            morse.put('6', "-....");
            morse.put('7', "--...");
            morse.put('8', "---..");
            morse.put('9', "----.");
            morse.put('0', "-----");

            Collection<String>  values= morse.values();

            for (String string: values) {
                System.out.print(string);
            }
            i++;
        }
    }
}

}

【问题讨论】:

标签: java collections hashmap


【解决方案1】:

您可以通过迭代EntrySet来反转HashMap,如下所示:

Map<String, Character> morseToEngMap = new HashMap<>();
// engToMorseMap is your original hashmap object named morse.
// morseToEngMap is reversed map
for(Map.Entry<Character, String> entry : engToMorseMap.entrySet()){ 
    morseToEngMap.put(entry.getValue(), entry.getKey());
} 

或者,您可以使用 Guava library ,它具有 inverse() 方法来为您完成这项工作。

BiMap<Character, String> engToMorseMap = HashBiMap.create(); 
// engToMorseMap is your original hashmap object named morse.
morse.put('a', ".-");
morse.put('b', "-...");

BiMap<String, Character> morseToEngMap = morse.inverse();
// morseToEngMap is reversed map.

希望对你有所帮助。

【讨论】:

  • 感谢您的快速回复。我确实尝试过,但我一直得到 null 作为输出。这是我之前尝试过但无济于事的格式,这让我很沮丧。
【解决方案2】:

感谢 Shishir Kumar 的快速回复,我昨晚看到了,但回复太累了。您发布的方式是我在寻求帮助之前尝试过的一种方式。如果我违反了这个论坛的规则,我深表歉意,但这是我第一次寻求帮助。这是我尝试更改变量名称以匹配您的代码的另一个版本。

import java.util.*;

公共类项目{

    public static void main(String[] args)
    {


        getInput();


    }

    public static void getInput()
        {

        char a;
        a = Input.getChar("Enter m for Morse to English or e for English to Morse.");
        if (a == 'm')
            translateMorse();
        else if (a == 'e')
            translateEnglish();
        else 
            System.out.println("Your input is not valid.");
        }

    public static void translateEnglish()
        {



        String englishToMorse = Input.getString("Enter a phrase in English.");
        englishToMorse = englishToMorse.toLowerCase();

        int i = 0;

        while(i <englishToMorse.length() ){

            Map<Character, String> morse = new HashMap<Character, String>();

            morse.put('a', ".-");
            morse.put('b', "-...");
            morse.put('c',  "-.-");
            morse.put('d',  "-..");
            morse.put('e',    ".");
            morse.put('f', "..-.");
            morse.put('g',  "--.");
            morse.put('h', "....");
            morse.put('i',   "..");
            morse.put('j', ".---");
            morse.put('k',   "-.");
            morse.put('l', ".-..");
            morse.put('m',   "--");
            morse.put('n',   "-.");
            morse.put('o',  "---");
            morse.put('p', ".--.");
            morse.put('q', "--.-");
            morse.put('r', ".-.");
            morse.put('s',  "...");
            morse.put('t',   "-");
            morse.put('u',  "..-");
            morse.put('v', "...-");
            morse.put('w',  ".--");
            morse.put('x', "-..-");
            morse.put('y', "-.--");
            morse.put('z', "--..");
            morse.put('1', ".----");
            morse.put('2',"..---");
            morse.put('3', "...--");
            morse.put('4', "....-");
            morse.put('5', ".....");
            morse.put('6', "-....");
            morse.put('7', "--...");
            morse.put('8', "---..");
            morse.put('9', "----.");
            morse.put('0', "-----");

            System.out.print(morse.get(englishToMorse.charAt(i)));

            i++;

            }


        }

    public static void translateMorse()
        {  

        String morseToEnglish = Input.getString("Enter a phrase in Morse Code.");
        morseToEnglish = morseToEnglish.toLowerCase();

        int i = 0;

        while(i < morseToEnglish.length() ){

            HashMap<Character, String> morse = new HashMap<>();

            morse.put('a', ".-");
            morse.put('b', "-...");
            morse.put('c',  "-.-");
            morse.put('d',  "-..");
            morse.put('e',    ".");
            morse.put('f', "..-.");
            morse.put('g',  "--.");
            morse.put('h', "....");
            morse.put('i',   "..");
            morse.put('j', ".---");
            morse.put('k',   "-.");
            morse.put('l', ".-..");
            morse.put('m',   "--");
            morse.put('n',   "-.");
            morse.put('o',  "---");
            morse.put('p', ".--.");
            morse.put('q', "--.-");
            morse.put('r', ".-.");
            morse.put('s',  "...");
            morse.put('t',   "-");
            morse.put('u',  "..-");
            morse.put('v', "...-");
            morse.put('w',  ".--");
            morse.put('x', "-..-");
            morse.put('y', "-.--");
            morse.put('z', "--..");
            morse.put('1', ".----");
            morse.put('2',"..---");
            morse.put('3', "...--");
            morse.put('4', "....-");
            morse.put('5', ".....");
            morse.put('6', "-....");
            morse.put('7', "--...");
            morse.put('8', "---..");
            morse.put('9', "----.");
            morse.put('0', "-----");

          Map <String, Character> englishMap = new HashMap<>();

          int k = 0;

          for (Map.Entry<Character, String> entry : morse.entrySet())
          {
              k++;

              System.out.println("This is the for loop " + k);
              englishMap.put(entry.getValue(), entry.getKey());

          }

          System.out.println(morse.get(morseToEnglish.charAt(i)) + "\nTHis is I = " + i);

          System.out.print(morseToEnglish);

            i++;


            }
        }



    }

我得到的唯一输出是 null 并且我知道或者至少认为我在做一些非常愚蠢的事情。

【讨论】:

  • 我什至需要两个哈希图还是可以是一个哈希图?我尝试使用两个哈希图,其中一个顺序相反,但它也不起作用。
  • 这样做之后,我输出了整个地图,发现它有问题;这是个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2010-12-23
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多