首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Morse码翻译器

Java Morse码翻译器
EN

Stack Overflow用户
提问于 2016-02-21 00:21:00
回答 2查看 2.8K关注 0票数 0

我对Java编程语言比较陌生,我正在从事的项目之一是Java morse代码翻译程序(Morse to English,反之亦然)。下面是一种将英文字符串翻译成莫尔斯电码的方法。

代码语言:javascript
复制
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] + " ");
            }
        }
    }


}

在某些情况下,程序工作正常:如果我输入'a',它会返回。-‘正确,但在其他情况下,它不工作。有小费吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-21 01:30:13

您的for循环没有按正确的顺序排列。将循环更改为:

代码语言:javascript
复制
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",则输入同样是morse中的"abc“。

您基本上脱离了字母表数组的第一个字符,并检查输入中的任何字符是否与第一个字母表字符相等,等等。因此,如果输入有'a‘--例如,不管那个单词中的'a’在哪里,它总是在第一个位置显示,因为它是第一个被检查的字母。

所以,如果你按我的方式做,你就离开了输入中的第一个字符,看看这个字符在字母表中的位置。

票数 1
EN

Stack Overflow用户

发布于 2016-02-21 00:48:14

我认为实现您想要的目标的最好方法是使用HashMap<Character, String>。将每个字母表字符放入HashMap作为键,将每个莫尔斯代码作为值。然后你就能得到这样的莫尔斯价值

代码语言:javascript
复制
    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命名约定。变量名称呼喊开始小写。不遵守这一规则并不是犯罪,但对其他人来说,这会使人感到困惑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35530754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档