【问题标题】:Converting Morse Code encoder to decoder in Processing 3 Problem在处理 3 问题中将摩尔斯电码编码器转换为解码器
【发布时间】:2025-11-27 23:30:01
【问题描述】:

我正在尝试在处理 3 上进行莫尔斯电码解码器。我有莫尔斯电码编码器的代码。但我正在努力将编码器转换为解码器。

我也想通过点击输入摩尔斯电码,但转换后将是下一步。

我尝试将输入和输出以及字母更改为莫尔斯语,但在代码的最后一部分,我卡住了。

这里是原始编码器:https://www.openprocessing.org/sketch/134812/

这是我修改后的解码器代码:

String textInput;
String textOutput;

void setup() {
  textInput = decodeMorseCode(textInput);
  textOutput = "";

   println("Morse code: " + textInput);
  println("Text output: " + textOutput);

}

void draw() {
}

String decodeMorseCode(String in_string) {

  String MorseCodeInput = in_string.toLowerCase();
  String TextOutput =  new String();

  String[] MorseCodeArray = {
    "._", "_...", "_._.", "_..", ".", ".._.", "__.", "....", "..", ".___", "_._", "._..", "__", 
    "_.", "___", ".__.", "__._", "._.", "...", "_", ".._", "..._", ".__", "_.._", "_.__", "__.."
  };

  String[] AlphabetArray = {
    "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"
  };


  for (int i=0; i<TextInput.length(); i++) {
    for (int j=0; j<AlphabetArray.length; j++) {
      if (String.valueOf(TextInput.charAt(i)).equals(AlphabetArray[j])) {
        MorseCode += MorseCodeArray[j] + " " ;
      }
    }
  }
  return MorseCode;
}

我在“for (int i=0; i

如果它能够正常工作,它应该将莫尔斯语解码为文本。

【问题讨论】:

  • 请写下您遇到的错误,它可以帮助人们帮助您。 textInput 未初始化。使用前必须先放一些东西。
  • 我该怎么做?

标签: processing encoder decoder morse-code


【解决方案1】:

我很乐意为您提供帮助,但首先我必须说,这个社区不是为了教授基础知识。 I suggest you visit this website and follow their instructions to learn more about Processing and programming in general.

我强烈推荐。


以下是关于处理的一些基本知识,您可能知道也可能不知道:

处理有2个非常重要的方法:setup()draw()

当你运行你的程序时,Processing 首先读取所有的全局变量。然后它读取setup(),然后是draw()。最后一个是每秒运行固定次数的受控循环。这是大部分魔法发生的地方。

setup() 主要用于“准备”所有内容,因此 draw() 循环已准备就绪。

我查看了编码器的代码。它接受输入(字母、单词等)并给出输出(摩尔斯电码)。编码器应该相反:你给程序一些摩尔斯电码,它给你一个翻译。

现在,手头的问题:


请记住,当我说“不要只是说您遇到了错误,请告诉我们错误说明了什么”。这很有帮助。我在处理中运行了你的代码,这不是我认为的第一个问题(好吧,我认为这是一个问题,但不是此时让你的代码崩溃的问题)。

以下是导致代码崩溃的问题,以及如何处理它们。阅读本文有望帮助您了解处理,但实际上,请阅读教程。

  1. 变量TextInput 不存在。相反,您将其命名为 MorseCodeInput,但没有在代码中更改它。有 2 种不同的简单解决方法,请选择一种:

    • 您可以将变量MorseCodeInput 重命名为TextInput
    • 您可以在decodeMorseCode 方法中将TextInput 的每个实例重命名为MorseCodeInput
  2. 您应该使用TextOutput,而不是使用MorseCode。您必须在这两个地方将它们重命名为TextOutput

    • MorseCode += MorseCodeArray[j] + " " ; => TextOutput += MorseCodeArray[j] + " " ;
    • return MorseCode; => return TextOutput;
  3. setup() 方法中,将输入初始化为一些实际的摩尔斯电码。

    • textInput = "_._. ___ _. __. ._. ._ _ .._ ._.. ._ _ .. ___ _. ..."; 应该这样做。
  4. textOutput 变量应该是翻译的结果。在setup()方法中,这样使用:

    • textOutput = decodeMorseCode(textInput);
  5. 耶!没有崩溃!但是也没有输出?为什么?有两个原因:

    • 首先因为算法正在寻找字母,我们给它点和线。
    • 其次,因为它一次只处理一个字符,这对于一个字母是几个点和线(每个点和线是一个字符)的摩尔斯电码没有意义。

所以...这就是你的立场。代码正在运行,但您仍有几个问题需要解决。我会给你其中一个,因为对于初学者来说很难弄清楚。

以下是为您的摩尔斯电码获取字符串数组的方法。在decodeMorseCode() 函数中,像这样初始化TextInput 变量:

String[] TextInput = split(in_string, ' ');

还有那些行:

for (int i=0; i<TextInput.length; i++) {
// ...
if (String.valueOf(TextInput[i]).equals(AlphabetArray[j])) {

您仍然没有输出,但现在您只需要弄清楚如何将莫尔斯电码与莫尔斯电码数组进行比较以获得适当的字母,而不是相反。如果您尝试失败,请告诉我,我会帮助您。

玩得开心。

【讨论】: