将英语转换为MorseCode

时间:2015-10-12 00:20:03

标签: java morse-code

这个java代码是将英文转换为莫尔斯代码。

当用户输入一个哨兵角色$时,该程序将终止。输入每个字符串后,程序显示其摩尔码相当,在字符之间留出一个空格(ø),在单词之间留下两个øø。

EG。你好,世界。输出应该是....ø.ø.- ..ø.- ..ø---øø.--ø---ø.-。ø.- ..ø - ..

我的代码存在一些问题。 1.我不知道在用户输入ø时我应该在哪里放置$来终止程序; 2.输出正确但始终以(ø)结束,因为System.out.print(code[variable] + "ø");

这是我的代码:

public class Morse{
public static void main (String [] args)
{
    Scanner englishtomorse = new Scanner(System.in);
    System.out.println ("Please enter an original sentence in English.");
    english = englishtomorse.nextLine();
    String str = englishtoMorse(english);
    System.out.println(str);
}

public static String englishtoMorse(String english)
{
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String code[] =  {"._", "_...", "_._.", "_..",".",".._.","__.", "....",
        "..", ".___", "_._", "._..", "__","_ .", "___", ".__.", "__._", "._.",
        "...", "_", ".._", "..._", ".__", "_.._", "_.__", "__.."};
    english = english.toUpperCase();
    for(int xyz = 0; xyz < english.length(); xyz++)
    {
        char letter = english.charAt(xyz);
        if (letter == ' ')
        {
            System.out.print ("ø");
            continue;
        }
        for(int variable = 0; variable < alphabet.length(); variable++)
        {
            if(alphabet.charAt(variable) == letter)
            {
                System.out.print(code[variable] + "ø");
                break;
            }
        }
    }
    return " ";
}

1 个答案:

答案 0 :(得分:1)

您的代码存在一些您应该注意的问题。

  1. 查看Sun/Oracle's naming convention。它使代码更容易阅读。 camelCase它是必须的。

  2. Scanner被视为Java上的资源。所以,如果你打开它,你必须关闭它。否则,您可能会遇到资源泄漏问题。关闭资源只是一个简单的方法调用,但它不应该被忽略。

  3. 例如:

    resourceVariableName.close().
    
    1. 第三行的英语变量声明在哪里?
    2.   

      english = englishtomorse.nextLine();

      第一个问题:

      Scanner将继续阅读,直到找到Java SE API

      中所述的文件结束条件为止

      使用Scanner处理循环内的数据并在满足文件结束条件时找到下一个操作或找到&#34; special&#34;这是常见的做法。退出词。

      因此,您可以重构代码以考虑以下情况:

      • 扫描程序找到了多行

      • 用户 DID NOT 键入您的保留退出字($)

      例如:

      Scanner myScanner = new Scanner(System.in);
      
      while(myScanner.hasNext() && !myScanner.equals("$")) {
          System.out.println(this.englishToMorse(myScanner.nextLine()));
      }
      
      myScanner.close();
      

      第二个问题,你应该检查你的方法逻辑。您声明您返回一个字符串,但它总是

        

      返回&#34; &#34 ;;

      为什么在任何情况下都应该返回一个空字符串?方法签名非常重要,因为您可以预测方法能够做什么以及它必须返回什么。

      考虑一下,如果你为朋友提供这个课程并且他打电话给你的方法,他怎么能预测你没有按照方法签名返回类型的规定返回莫尔斯代码?

      顺便说一下,你可以更好地解决这个问题,而不需要绕过两个数组。看看Map data structure。这是对整体解决方案的巨大改进。