Java摩尔斯电码翻译

时间:2016-02-21 00:21:00

标签: java

我对Java编程语言比较陌生,我正在研究的项目之一是Java morse代码翻译器(Morse到英语,反之亦然。)下面是一种将英文字符串翻译成Morse的方法码。

public static void StringtoMorse(String str){
    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 [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "|"};


    for (int i = 0; i < Alphabet.length; i ++){
        for (int j = 0; j < str.length(); j ++){
            if (Alphabet[i] == (str.charAt(j))){
                System.out.print(MorseCode[i] + " ");
            }
        }
    }


}

在某些情况下,该程序有效:如果我输入&#39; a,它将返回&#39; .-&#39;正确的,但对于其他一些情况,它不起作用。有什么提示吗?

2 个答案:

答案 0 :(得分:2)

我认为实现目标的最佳方法是使用HashMap<Character, String>。将每个字母字符作为键放在HashMap上,并将每个摩尔斯电码作为值。然后你将能够得到像这样的每个莫尔斯价值

    Character 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 [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "|"};
    HashMap<Character, String> morseCodes = new HashMap<Character, String>();
    for(int i = 0; i < Alphabet.length; i++)
    {
        morseCodes.put(alphabet[i], morseCode[i]);
    };

并且不要忘记在从HashMap获取Morse值时将每个字符强制转换为小写,因为您已将每个字符都设置为小写。 并尝试习惯java命名约定。变量名呼喊开始小写。不服从这条规则不是犯罪,但对其他人来说则会令人困惑。

答案 1 :(得分:1)

您的for循环顺序不正确。将你的循环更改为:

for (int i = 0; i < input.length(); i ++){ //in your code, this is the inner for and it should be the outer one as it is here

        for(int j = 0; j < Alphabet.length; j++){ //same for this one

            if(input.charAt(i) == Alphabet[j]){

                System.out.print(MorseCode[j] + " || ");

            }//end if 

         }//end inner for
}//end outer for

根据您的需要,您实施它的方式是错误的。它实际上工作正常,但显示莫尔斯值按字母顺序排序。如果输入为“abc”,则输出将是正确的,因为输入已按字母顺序排序。但如果输入是“cab”,则输入在莫尔斯中同样是“abc”。

你基本上离开了字母数组的第一个字符,并检查输入中的任何字符是否等于第一个字母字符,依此类推。因此,如果输入有一个'a',例如,无论那个'a'在那个单词里面,它总是会显示在第一个位置,因为它是第一个被检查的字母。

因此,如果您按照我的方式进行操作,那么您将从输入中的第一个字符开始,并查看字母表中字符的位置。