Применение азбуки Морзе (JAVA Gui)
Я пытаюсь создать приложение с графическим интерфейсом, которое читает английский пользовательский ввод и переводит на азбуку Морзе ( http://ascii-table.com/morse-code.php). Я затронул основные части программы до сих пор. Мой вопрос Каков наилучший способ чтения Морзе? Должен ли я создать текстовый файл для импорта азбуки Морзе или я должен объявить каждый из них в программе для перевода? Следующий вопрос: как мне это сделать? пожалуйста, обратитесь к учебнику, если это возможно. Спасибо за ваше время.
3 ответа
Поскольку азбука Морзе вряд ли изменится, допустимым вариантом является жесткое кодирование отображения символов в строки кода:
private static Map<Character,String> charToCode = new HashMap<Character,String>();
{
charToCode.put('A', ".-");
charToCode.put('B', "-...");
...
charToCode.put('Z', "--..");
}
Эта карта позволяет вам конвертировать сообщения в код по одному символу за раз:
- Делать
StringBuilder
за результат - Просмотрите символы ввода по одному символу за раз. Ты можешь использовать
charAt(i)
для этого - Преобразовать символ в верхний регистр
- использование
charToCode.get(upperChar)
посмотреть кодовое представление персонажа - Добавить представление к
StringBuilder
; добавить пробел после него - Когда цикл закончен, конвертируйте
StringBuilder
вString
и поместите его на этикетку.
Вы можете иметь два файла, поддерживаемые снаружи. У одного есть сопоставление от Буквы к азбуке Морзе, а другое от Азбуки Морзе к Буквы. Затем вы можете построить оба конвертера, выполнив поиск из соответствующего файла.
Либо вы можете прочитать входные данные от пользователя и сравнить их во время выполнения с предопределенными символами и числами, хранящимися в программе, либо вы можете ввести файл и прочитать его с помощью FileReader
Но вот логика, которую вы должны выполнить для сравнения во время выполнения
char[] english = { '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', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
',', '.', '?' }; //Defining a Character Array of the English Letters numbers and Symbols so that we can compare and convert later
String[] morse = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
".---", "-.-", ".-..", "--", "-.", "---", ".---.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".----",
"..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.",
"-----", "--..--", ".-.-.-", "..--.." };
System.out.println("-->Enter the Sentence that you want to Transmit Using the Morse Code ");
System.out.print("->");
sentence = br.readLine();
System.out.println("");
sentence = sentence.toLowerCase(); //Because morse code is defined only for the lower case letters and the numbers and the Symbols will remain the Same
char[] morsec = sentence.toCharArray();
for(int i = 0; i < morsec.length;i++) //The loop will run till i is less than the number of characters in the Sentence because Every Character needs to Be Converted into the Respective Morse Code
{//For Every Letter in the User Input Sentence
for(int j = 0;j<english.length;j++) //For Every Character in the morsec array we will have to traverse the entire English Array and find the match so that it can be represented
{
if(english[j] == morsec[i]) //If the Character Present in English array is equal to the character present in the Morsec array then Only Execute
{//Always remember that the condition in the Inner loop will be the first to be Equated in the If Statement because that will change until the characters match
answer = answer + morse[j] + " "; //After Every Letter is generated in the Morse Code we will give a Space
} //Since the Letters in the English char and the symbols present in the morse array are at the Same Index
}
}
System.out.println("-->The Morse Code Translation is:- ");
System.out.Println(answer);