I have seen many questions about the Morse Code translator floating around and have looked at many of them, but in all of them the suggested answer gives me the same incorrect output. The idea behind the code is to be able to translate Morse Code to English and vice versa using arrays. My code is as follows:
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
}
}
}
}
}
}
I have been using the phrase
to be
and its Morse Code counterpart
- --- | -… .
as a test phrase. When I try translating English to Morse Code with this phrase I get
... -.
s and n
as the output. When I try Morse Code to English, I get
u
as the output. I have gone over my two String arrays to make sure morse[A]
and english[A]
are in the same index position and so on, and those are fine. I can't think of anything else that would cause this problem.
Edit: It may be helpful to know I'm using IntelliJ IDEA 15
The translation from morse to English is not working due to your use of Scanner. You need to use nextLine() as follows:
if (userChoice == 1 )
{
translateMe = input.nextLine();
System.out.println("Please enter a Morse Code statement to translate. Separate letters with spaces and words with a ' | '" );
translateMe = input.nextLine();
After that, it seems to translate fine, even with the split command.
Output:
[.-, -..., -.-.]
abc
Output 2:
Please enter a Morse Code statement to translate. Separate letters with spaces and words with a ' | '
- --- | -... .
[-, ---, |, -..., .]
to be