Преобразование кодера Морзе в декодер при обработке 3 Проблема - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь сделать декодер азбуки Морзе при обработке 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

Если это будет работать должным образом, он должен декодировать азбуку текста.

1 Ответ

0 голосов
/ 09 октября 2019

Я с радостью помогу вам в этом, но сначала я должен сказать, что это сообщество не для обучения основам. Я предлагаю вам посетить этот сайт и следовать их инструкциям, чтобы узнать больше об обработке и программировании в целом.

Я настоятельно рекомендую.


Вот некоторые основные вещи, которые выможет или не может знать об обработке:

Обработка имеет 2 очень важных метода: setup() и draw().

Когда вы запускаете вашу программу, Обработка сначала читает все глобальные переменные. Затем он читает setup(), а затем draw(). Последний является управляемым циклом, который выполняется фиксированное число раз в секунду. Именно здесь происходит большая часть магии.

setup() в основном используется для «подготовки» всего, поэтому цикл draw() готов к работе.

Я посмотрел код кодера,Он принимает входные данные (буквы, слова и т. Д.) И выдает выходные данные (код Морзе). Кодировщик должен быть наоборот: вы даете программе азбуку Морзе, и она дает вам перевод.

Теперь, к рассматриваемой проблеме:


Помните, когда я сказал "Не просто говорите, что вы получили ошибку, скажите нам, что говорит ошибка ". Это очень помогает. Я запустил ваш код в программе Processing, и это не было проблемой, хотя я был первым (ну, я думал, что это была проблема, но не та, которая вызвала ваш код в этот момент).

Здесьпроблемы, которые приводят к краху вашего кода, и способы их решения. Надеемся, что прочтение этого поможет вам узнать об обработке, но, на самом деле, изучите учебники.

  1. Переменная TextInput не существует. Вместо этого вы назвали его MorseCodeInput, но не изменили его в коде. Существует 2 различных простых исправления, выберите одно из них:

    • Вы можете переименовать переменную MorseCodeInput как TextInput.
    • Вы можете переименовать каждый экземпляр TextInput какMorseCodeInput в методе decodeMorseCode.
  2. Где вы должны использовать TextOutput, вместо этого вы использовали MorseCode. Вы должны переименовать их как TextOutput в этих двух местах:

    • MorseCode += MorseCodeArray[j] + " " ; => TextOutput += MorseCodeArray[j] + " " ;
    • return MorseCode; => return TextOutput;
  3. В методе setup() инициализируйте ввод для некоторого фактического кода Морзе.

    • textInput = "_._. ___ _. __. ._. ._ _ .._ ._.. ._ _ .. ___ _. ..."; должен сделать это.
  4. Переменная textOutput должна быть результатом перевода. В методе setup() используйте его следующим образом:

    • textOutput = decodeMorseCode(textInput);
  5. Yay! Без падений! Но выхода тоже нет? Почему? Есть две причины:

    • Во-первых, потому что алгоритм ищет буквы, и мы дали ему точки и строки.
    • Во-вторых, потому что он делает это по одному символу за раз, что не делаетсмысл для азбуки Морзе, где буква состоит из нескольких точек и линий (по одному символу в каждой).

Итак ... Вот где вы стоите. Код выполняется, но вам все еще нужно решить несколько проблем. Я дам вам один из них, потому что это будет довольно сложно понять новичку.

Вот как получить массив строк для вашего азбуки Морзе. В функции decodeMorseCode() инициализируйте переменную TextInput следующим образом:

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

А также эти строки:

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

У вас все еще не будет вывода, но теперь вы толькоНужно выяснить, как сравнить код Морзе с массивом кода Морзе, чтобы получить соответствующую букву, а не наоборот. Дайте мне знать, если вы попытаетесь потерпеть неудачу, и я помогу вам.

Веселитесь.

...