我的计划是将输入从英语转换为摩尔斯电码,反之亦然。首先,它会提示用户是否输入摩尔斯电码或英文。在那之后,它将一个翻译成另一个。我首先处理英语到摩尔斯电码的翻译。我在莫尔斯电码中使用包含字母的数组:
String[] codes = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", ".---- ", "..--- ", "...-- ", "....- ", "..... ", "-.... ", "--... ", "---.. ", "----. ", "----- "};
摩尔斯电码的翻译必须以某种方式呈现。当然,英文字母中的每个字母必须由其在摩尔斯电码中的相应字符表示。每个字符必须用空格分隔。但是,每个单词必须用直线(|)分隔。标点符号和大写是没有必要的。这是一个澄清的例子:
输入:这是一个测试。
输出: - .... .. ... | .. ... | .- | - 。 ...... -
我的代码如下:
import javax.swing.JOptionPane;
public class ProjectOne
{
public static void main (String[] args)
{
String decision = getString ("Will you be typing in English or Morse Code?");
String english = "english";
String morse = "morse";
String[] codes = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", ".---- ", "..--- ", "...-- ", "....- ", "..... ", "-.... ", "--... ", "---.. ", "----. ", "----- ", "| "};
char[] letters = {'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', ' '};
if (decision.equalsIgnoreCase(morse))
{
//Translate to English here
}
else if (decision.equalsIgnoreCase(english))
{
String input = getString ("Enter a phrase to be translated to Morse Code:");
input = input.toUpperCase();
for (int n = 0; n < input.length(); n++)
{
char ch = input.charAt(n);
for (int i = 0; i < 26; i++)
{
if (ch == letters[i])
{
String newch = Character.toString(ch);
System.out.print(codes[i]);
}
}
}
}
else
{
System.out.println("Invalid Input - Type 'English' or 'Morse'");
}
}
public static String getString(String paramString)
{
String str = JOptionPane.showInputDialog(paramString);
return str;
}
}
我的问题是莫尔斯电码翻译没有出现“|”每个单词之间的分隔符。我尝试在数组的末尾添加一个空格字符,其中包含英文字母的字母和数组末尾的“|”字符串,其中包含摩尔斯电码字符,认为for循环会像其他任何字符一样拾起它字符,但翻译显示单词之间的空格无论如何。我该怎么做才能解决这个问题?
答案 0 :(得分:4)
问题是您在for
循环中使用magic number:
for (int i = 0; i < 26; i++)
但是如果你在末尾添加一个空格,那么数组的大小会变为27。
您可以使用更易于维护的解决方案,例如:
for (int i = 0; i < letters.length; ++i)
甚至更好,使用Map
来存储您的编纂。例如:
Map<Character, String> code = new HashMap<Character, String>();
code.put('a', ".-");
答案 1 :(得分:1)
有两个问题:
1)您的代码表无效。代码有37个元素,而字母有27个
2)for循环不检查foll codetable:
for (int i = 0; i < 26; i++)
使用for (int i = 0; i < codes.length; i++)