我对Java编程语言比较陌生,我正在从事的项目之一是Java morse代码翻译程序(Morse to English,反之亦然)。下面是一种将英文字符串翻译成莫尔斯电码的方法。
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',它会返回。-‘正确,但在其他情况下,它不工作。有小费吗?
发布于 2016-02-21 01:30:13
您的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",则输入同样是morse中的"abc“。
您基本上脱离了字母表数组的第一个字符,并检查输入中的任何字符是否与第一个字母表字符相等,等等。因此,如果输入有'a‘--例如,不管那个单词中的'a’在哪里,它总是在第一个位置显示,因为它是第一个被检查的字母。
所以,如果你按我的方式做,你就离开了输入中的第一个字符,看看这个字符在字母表中的位置。
发布于 2016-02-21 00:48:14
我认为实现您想要的目标的最好方法是使用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命名约定。变量名称呼喊开始小写。不遵守这一规则并不是犯罪,但对其他人来说,这会使人感到困惑。
https://stackoverflow.com/questions/35530754
复制相似问题