【问题标题】:Morse code translator莫尔斯电码翻译器
【发布时间】:2012-10-21 03:52:57
【问题描述】:

我一直在尝试创建一个摩尔斯电码翻译器,但遇到了一些问题。它可以编译,但是当我尝试运行它时,它只询问第一个问题,即您要翻译哪种方式,而不是您要翻译什么。我知道我的第一个功能非常低效。我也使用Input.getString,我认为它不是标准的,但它基本上允许您输入字符串。

这是我的代码:

public class MorseCodeJavaProgram {
    public static void morse( String s3 ){
        int letters [ ] = new int [ 26 ];
        for ( int num = 0; num < s3.length(); num++ ){
                switch ( s3.charAt( num ) ){
                    case 'a':
                        System.out.print( ".- ");
                        break;
                    case 'b':
                        System.out.print( "-… ");
                        break;
                    case 'c':
                        System.out.print( "-.-. ");
                        break;
                    case 'd':
                        System.out.print( "-.. ");
                        break;
                    case 'e':
                        System.out.print( ". ");
                        break;
                    case 'f':
                        System.out.print( "..-. ");
                        break;
                    case 'g':
                        System.out.print( "--. ");
                        break;
                    case 'h':
                        System.out.print( "…. ");
                        break;
                    case 'i':
                        System.out.print( ".. ");
                        break;
                    case 'j':
                        System.out.print( ".--- ");
                        break;
                    case 'k':
                        System.out.print( "-.- ");
                        break;
                    case 'l':
                        System.out.print( ".-.. ");
                        break;
                    case 'm':
                        System.out.print( "-- ");
                        break;
                    case 'n':
                        System.out.print( "-. ");
                        break;
                    case 'o':
                        System.out.print( "--- ");
                        break;
                    case 'p':
                        System.out.print( ".--. ");
                        break;
                    case 'q':
                        System.out.print( "--.- ");
                        break;  
                    case 'r':
                        System.out.print( ".-. ");
                        break;  
                    case 's':
                        System.out.print( "... ");
                        break;
                    case 't':
                        System.out.print( "- ");
                        break;  
                    case 'u':
                        System.out.print( "..- ");
                        break;  
                    case 'v':
                        System.out.print( "...- ");
                        break;
                    case 'w':
                        System.out.print( ".-- ");
                        break;
                    case 'x':
                        System.out.print( "-..- ");
                        break;
                    case 'y':
                        System.out.print( "-.-- ");
                        break;
                    case 'z':
                        System.out.print( "--.. ");
                        break;
                    case ' ':
                        System.out.print( " | ");
                        break;
                }

            }
    }
    public static void toEnglish( String s1 ){
    String english [ ] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "y", "z", " " };
    String morse [ ] = { ".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", "…. ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", "| " };

        for ( int num = 0; num < s1.length(); num++ ){
            if ( s1.charAt ( num ) == ' '){
                for ( int num2 = num; num2 < s1.length(); num2++ ){
                    if ( s1.charAt ( num2++ ) == ' '){
                        for ( int num3 = 0; num < 26; num3++ ){
                            if ( s1.substring( num++, num2 + 2 ) == ( morse [ num3 ] )){
                                System.out.print( english [ num3 ] );
                            }
                        }
                    }

                }


            }
        }
    }

    public static void main( String [] args ){
        String s2 = Input.getString( "To Morse or From Morse" );
        if ( s2 == "From Morse" ){
            String s1 = Input.getString( "Please type a phrase in English" );
            toEnglish( " " + s1 + " " );
        }
        if ( s2 == "To Morse" ){
            String s3 = Input.getString( "Please type a phrase in Morse Code" );
            morse( s3 );
        }
    }
    }

【问题讨论】:

  • 我不知道为什么我的代码出现了两次对不起
  • 比较文本字符串时,我很喜欢使用string.equalsIgnoreCase(anotherString);
  • 考虑在codereview上询问代码相关问题

标签: java morse-code


【解决方案1】:

您正在使用== 比较字符串。在 Java 中,== compares references, not content

将它们更改为使用.equals(),如下所示:

if ( s2 == "From Morse" ){

应该是:

if ( s2.equals( "From Morse" ) ){

当然,这也应该适用于您的其他字符串比较。 (您的char 比较照原样。)

【讨论】:

  • 谢谢,但现在我在访问数组的 -1 索引时遇到错误
  • 您可能想要关闭此线程(答案旁边的复选标记)并打开一个新线程。我只发布toEnglish 方法,并发布完整的错误输出。你的循环肯定需要清理一下,但比我可以通过 cmets 做的更多。
【解决方案2】:

您正在将字符串值与 == 运算符进行比较。但是 == 运算符只检查对象引用是否相等。

 if ( s2 == "From Morse" ){
            String s1 = Input.getString( "Please type a phrase in English" );
            toEnglish( " " + s1 + " " );
        }

你试试

 if ("From Morse".equals(s2) ){
                String s1 = Input.getString( "Please type a phrase in English" );
                toEnglish( " " + s1 + " " );

【讨论】:

  • 使用"From Morse".equals 是比s2.equals( "From Morse" ) 更好的选择。
  • @cwallenpoole 为什么? This question and its answers 似乎另有说明。
  • 如果s2为null则发生空指针异常。
  • @Eric 它使变量容错。
  • @cwallenpoole 嗯..公平。我仍然尽可能避免尤达条件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
相关资源
最近更新 更多