使用for循环转换输入

时间:2013-10-13 20:28:00

标签: java arrays string for-loop char

我的计划是将输入从英语转换为摩尔斯电码,反之亦然。首先,它会提示用户是否输入摩尔斯电码或英文。在那之后,它将一个翻译成另一个。我首先处理英语到摩尔斯电码的翻译。我在莫尔斯电码中使用包含字母的数组:

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循环会像其他任何字符一样拾起它字符,但翻译显示单词之间的空格无论如何。我该怎么做才能解决这个问题?

2 个答案:

答案 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++)

之类的东西