0

我的程序是将输入从英语翻译成摩尔斯电码,反之亦然。首先,它会提示用户输入莫尔斯电码还是英语。之后,它将一个翻译成另一个。我首先处理将英语翻译成摩尔斯电码。我正在使用这个包含摩尔斯电码字母的数组:

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 循环会像其他任何循环一样拾取它字符,但无论如何翻译都会在单词之间出现空格。我能做些什么来解决这个问题?

4

2 回答 2

4

问题是您在循环中使用了幻数:for

for (int i = 0; i < 26; i++)

但是如果你在末尾添加一个空格,那么数组的大小会变为 27。

您可以使用更易于维护的解决方案,例如:

for (int i = 0; i < letters.length; ++i)

甚至更好的是,使用 aMap来存储您的编码。例如:

Map<Character, String> code = new HashMap<Character, String>();
code.put('a', ".-");
于 2013-10-13T20:31:57.150 回答
1

有两个问题:

1)您的代码表无效。代码有 37 个元素,而字母有 27 个

2)for循环不检查foll代码表: for (int i = 0; i < 26; i++) 使用类似的东西for (int i = 0; i < codes.length; i++)

于 2013-10-13T20:39:59.000 回答