Я делаю проект для моего класса в области компьютерных наук, и я сталкиваюсь с некоторой путаницей. Мне поручено написать программу, которая переводит введенное пользователем сообщение с английского на код Морзе. Я выполнил основную часть задания, но я не могу понять, как именно происходит преобразование пользовательского сообщения в код Морзе.
import java.util.*;
import java.io.File;
import java.io.IOException;
public class MorseCode
{
public MorseCode()
{
}
//Reads in file containing Morse code and stores into an array of Strings
public static String [] readFile() throws IOException
{
String [] codes = new String[36];
int index = 0;
Scanner fileScanner = new Scanner(new File("morsecode.txt"));
while( fileScanner.hasNextLine() )
{
codes[index] = fileScanner.nextLine();
index++;
}
return codes;
}
//Converts the array of morse codes to an array of its corresponding letter
public static String [] findChars(String [] morseCode)
{
String [] alphabet = {"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"};
for( int index = 0; index < morseCode.length; index++)
{
morseCode[index] = alphabet[index];
}
return morseCode;
}
}
На данный момент просто используется для тестирования, чтобы убедиться, что все работает по назначению. И код Морзе, и его алфавитный и числовой эквивалентные выходы правильно.
import java.util.*;
import java.io.File;
import java.io.IOException;
public class MorseCodeTester
{
public static void main(String [] args) throws IOException
{
Scanner in = new Scanner(System.in);
//Original Morse Code
String [] morseCode = MorseCode.readFile();
//Conversion to standard english letters
String [] toConvert = MorseCode.readFile();
String [] codeToLetters = MorseCode.findChars(toConvert);
for( int index = 0; index < morseCode.length; index++)
{
System.out.println(morseCode[index]);
}
System.out.println();
for( int index = 0; index < morseCode.length; index++)
{
System.out.println(codeToLetters[index]);
}
}
}
Как уже говорилось ранее, моя путаница исходит из фактического преобразования английского языка в код Морзе после ввода пользователем желаемого сообщения. Если бы кто-нибудь мог указать мне в правильном направлении, это было бы очень признательно.
Вы можете сохранить каждый символ на карте вместе со своей соответствующей строкой кода Морзе. например
HashMap<String, String> codes = new HashMap<String, String>();
codes.put("a", ".-");
codes.put("b", "-...");
Затем при преобразовании строки вы можете использовать карту, чтобы найти соответствующую строку кода Морзе для каждого символа строки, подлежащей преобразованию.
Например:
String str = "To be converted to morse";
StringBuilder morseSB = new StringBuilder();
for(int i=0; i< str.length(); i++)
{
morseSB.append(codes.get(Character.toString(str.charAt(i)).toLowerCase()));
}
String morseResult = morseSB.toString();
Примечание: вам нужно будет добавить некоторые меры предосторожности. например, проверка, является ли результат из code.get() нулевым, и вам, возможно, придется обрабатывать другие символы, такие как пробелы и периоды.
эта функция преобразует "Hello world" в код Морзе
public static String charToMorse( String s ){
if( s.equals( "H" ) || s.equals("h"))
return "....";
else if ( s.equals( "E" ) || s.equals("e"))
return "."
// other alphabet will placed here
}
и напишите другой метод для перемещения символа строки
public static void showMorse( String s ){
for( int i=0 ; i < s.length() ; i++ )
System.out.printf( "%s " , charToMorse( s[i] ) );
System.out.println();
}
это изображение показывает код Морзе, который вам нужен