0

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

当用户输入标记字符 $ 时,该程序将终止。在输入每个字符串后,程序会显示其等效的摩尔斯电码,在字符之间留一个空格 (ø),在单词之间留两个 øø。

例如。你好世界。输出应为 ....ø.ø.-..ø.-..ø---øø.--ø---ø.-.ø.-..ø-..

我的代码有一些问题。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 " ";
}
4

1 回答 1

1

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

  1. 查看Sun/Oracle 的命名约定。它使代码更容易阅读。camelCase 这是必须的。

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

例如。:

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

英语 = englishtomorse.nextLine();


第一个问题:

Scanner继续读取,直到找到Java SE API中所述的文件结束条件

Scanner用于处理循环内的数据并在满足文件结尾条件或找到“特殊”退出字时停止下一个操作是一种常见的做法。

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

  • 扫描仪发现不止一行

  • 用户没有输入您保留的退出词 ($)

例如:

Scanner myScanner = new Scanner(System.in);

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

myScanner.close();

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

返回“”;

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

想一想,如果你为朋友提供这个类并且他调用你的方法,他怎么能预测你没有返回方法签名返回类型中所述的莫尔斯电码?

顺便说一句,您可以在不循环两个数组的情况下以更好的方式解决这个问题。看看Map 数据结构。这是对您的整体解决方案的巨大改进。

于 2015-10-12T01:49:48.750 回答