【问题标题】:Converting Morse Code to English Text with Java使用 Java 将摩尔斯电码转换为英文文本
【发布时间】:2015-04-11 01:13:58
【问题描述】:

我最近有一项任务是将英语转换为摩尔斯电码并将摩尔斯电码转换为英语。输入摩尔斯电码时,我的老师希望单个字母用 1 个空格分隔,单词用“|”分隔。例如 - ---- | -...是“成为”。我能够让英语到莫尔斯语完美地工作,但我对莫尔斯语到英语一无所知。我不知道如何让 for 循环在正确的点停止并将其与数组中的代码之一匹配。

顺便说一句,我的老师不喜欢 Scanner,所以他使用自己的输入系统。我熟悉他的方法,因此避免使用 Scanner 将不胜感激

public class Project1
{
    public static void main( String [] args )
    {
        String morse[] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..",
            "--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",
            "|",".---","..---","...--","....-",".....","-....","--...","---..","----.","-----"};    
        String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890";

        String inputType = new String();
        inputType = Input.getString( "Is your phrase in Morse Code or English? Enter 'morse' for Morse Code and 'english' for English" );


        if( inputType.equalsIgnoreCase("morse") )
            morseToEnglish(alphabet, morse);
        else if( inputType.equalsIgnoreCase("english") )
            englishToMorse(alphabet, morse);
        else    
            System.out.println("Your entry is invalid");

    }

    public static void englishToMorse(String alphabet, String morse[])
    {
        String phrase = Input.getString("Enter your english phrase.");
        phrase = phrase.toUpperCase();

        for( int i = 0; i < phrase.length(); i++ )
        {
            if( phrase.charAt(i) == ' ' )
            {
                System.out.print("| ");
                continue;
            }

            for( int j = 0; j < alphabet.length(); j++ )
            {
                if( alphabet.charAt(j) == phrase.charAt(i) )
                {
                    System.out.print( morse[j] + " " );
                    break;
                }
            }
        }
    }

    public static void morseToEnglish(String alphabet, String morse[])
    {
        String morseCode = Input.getString("Enter a phrase in morse code.");



        for( int i = 0; i < morseCode.length(); i++ )
        {
            for( int j = 0; j < morse.length; j++ )
            {
                if ( morse[j] == morseCode.charAt(i))
                    System.out.print( alphabet.charAt(j) );

            }
        }   
    }
}

任何指针将不胜感激。哦,抱歉,如果 morseToEnglish 代码看起来不连贯且糟糕,我尝试了很多不同的方法,但不知所措。

【问题讨论】:

  • 使用split()方法,先用|再用空格。
  • @Jean-François Savard 我不确定是不是他不喜欢,只是他更喜欢自己的方法。
  • @PM 77-1 我不熟悉拆分方法,还有其他方法吗?如果没有,我可以查找拆分方法。
  • 您可以将循环更改为 while 循环并手动增加索引。条件为i &lt; morseCode.length()charAt (i) != '|'charAt(i) != ' '。在内循环内将字符追加到String morseletter 并在内循环后翻译。
  • @Jean-François Savard 不,会弹出一个对话框,其中显示一条消息和一个要输入的空间。这样对学生来说更直接

标签: java string


【解决方案1】:

我建议使用 String.split()。您可以在 | 上拆分,然后在空格上进一步拆分它们。带有打印字符的 toString() 的枚举类型可能有助于划分转换逻辑(如果您不知道开关,这是学习它们的好机会)。然后根据需要连接字符串添加空格。

String.Split() 是一个了不起的工具。学习它,你会受益匪浅。

【讨论】:

  • 谢谢,但我不熟悉 split 方法,因为我们没有在课堂上介绍过它。有没有其他方法可以用来实现相同的目标?
  • 总有另一种方法可以做到这一点。在我的 CS 课程早期,他们让我们使用 Tokanizer(认为这是正确的名称),它基本上是迭代形式的 .split()。自从我学习了正则表达式并找到了 split() 之后,我就没有接触过 Tokanizer。您可以循环并获取子字符串,您可以使用 charAt() 将其全部解析出来...如果您想进行手动比较,请记住使用 String.equals()。
  • 谢谢!我设法使用了 split 方法,并且效果很好。感谢您的帮助。
【解决方案2】:

morseToEnglish 应该是englishToMorse 算法的逆向算法。

像以前一样,您可以循环输入 strong。不同之处在于莫尔斯语中的多个字符组成一个英文字符。因此,请跟踪局部变量中的那些。当您在摩尔斯中找到一个空格时,找到匹配的英文字符。您可以在 Norse 数组中循环查找匹配项,或者进行单独的映射,其中查找键是莫尔斯符号(类似于 HashTable)。当你到达一个管道字符时,在从你的局部变量中找到字符之后,而不是继续,你应该在继续之前添加一个英文空格来表示单词的边缘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-25
    • 2010-12-23
    • 1970-01-01
    • 2020-04-22
    • 2013-02-12
    • 2012-12-04
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多