Я видел много вопросов о переводчике азбуки Морзе и просмотрел многие из них, но во всех из них предложенный ответ дает мне один и тот же неверный результат. Идея кода состоит в том, чтобы иметь возможность переводить азбуку Морзе на английский язык и наоборот с помощью массивов. Мой код выглядит следующим образом:
import java.util.Scanner;
public static void main ( String [] args )
{
String [] morse = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "|"};
String [] 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", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " "};
Scanner input = new Scanner ( System. in );
System.out.println ( "Enter 1 to translate Morse Code to English or 2 to translate English to Morse Code:");
int userChoice = input.nextInt();
String translateMe;
while (userChoice < 1 || userChoice > 2 ) // Ensures user enters a valid choice
{
System.out.println( "Not a valid entry. Enter 1 to translate Morse Code to English or 2 to translate English to Morse Code:");
userChoice = input.nextInt();
}
if (userChoice == 1 )
{
System.out.println("Please enter a Morse Code statement to translate. Separate letters with spaces and words with a ' | '" );
translateMe = input.next();
String [] morseChar = translateMe.split(" ");
for( int x = 0; x < morseChar.length; x++)
{
String letter = morseChar[ x ];
for ( int index = 0; index < morse.length; index++ )
{
if(morse [ index ].equals(letter))
{
System.out.print(english[ index ]); // Display character at matching index position of English array to show translation
}
}
}
}
else
{
System.out.println("Please enter an English statement to translate:");
translateMe = input.next();
translateMe = translateMe.toLowerCase();
String [] englishChar = translateMe.split("(?!^)");
for ( int x = 0; x < englishChar.length; x++)
{
String letter = englishChar [ x ];
for (int index = 0; index < english.length; index++)
{
if( english [index].equals( letter ))
{
System.out.print(morse[index] + " "); // Display Morse Code array character at matching index position to show translation
}
}
}
}
}
}
Я использовал фразу
to be
и его аналог азбуки Морзе
- --- | -… .
в качестве тестовой фразы. Когда я пытаюсь перевести с английского на азбуку Морзе с помощью этой фразы, я получаю
... -.
с и н
как выход. Когда я пытаюсь перевести азбуку Морзе на английский язык, я получаю
u
как выход. Я просмотрел два своих массива строк, чтобы убедиться, что morse[A]
и english[A]
находятся в одной и той же позиции индекса и т. д., и все в порядке. Я не могу думать ни о чем другом, что могло бы вызвать эту проблему.
Изменить: может быть полезно знать, что я использую IntelliJ IDEA 15.