Нужна помощь с Java переводчик азбуки Морзе быстро
Для моего вступления в класс Java я должен создать переводчик азбуки Морзе, который может конвертировать как с английского на азбуку Морзе, так и с английского на азбуку Морзе. Мой код работает для преобразования английского языка в азбуку Морзе, но, похоже, не может пойти другим путем, от азбуки Морзе до английского. Вот подсказка:
Этот проект включает в себя написание программы для перевода азбуки Морзе на английский и с английского на азбуку Морзе. Ваша программа предложит пользователю указать желаемый тип перевода, ввести строку символов азбуки Морзе или английских символов, а затем отобразить переведенные результаты. При вводе азбуки Морзе отделяйте каждую букву / цифру одним пробелом и разделяйте несколько слов "|". Например, - --- | -… будет входным кодом Морзе для предложения "быть". Ваша программа должна обрабатывать только одно предложение и может игнорировать знаки препинания. При вводе английского языка разделяйте каждое слово пробелом.
Мне интересно, что не так с моим текущим кодом "Азбука Морзе". Пожалуйста, помогите, если вы понимаете, что происходит не так, я потратил часы, пытаясь разобраться в этом, и я дошел до полуночи по тихоокеанскому времени 26.08.2015. Спасибо! Вот мой код:
//Justin Buckley
//8.26.2015
import java.util.Scanner;
public class MorseCodeProject1 {
public static void main (String[] args)
{
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' };
String [] Morse = { ".-" , "-..." , "-.-." , "-.." , "." , "..-." , "--." , "...." , ".." , ".---" , "-.-" , ".-.." , "--" , "-." , "---" , ".--." , "--.-" , ".-." , "..." , "-" , "..-" , "...-" , ".--" , "-..-" , "-.--" , "--.." , "|" };
Scanner input = new Scanner (System.in);
System.out.println( "Please enter \"MC\" if you want to translate Morse Code into English, or \"Eng\" if you want to translate from English into Morse Code" );
String a = input.nextLine();
if ( a.equalsIgnoreCase("MC"))
{
System.out.println( "Please enter a sentence in Morse Code. Separate each letter/digit with a single space and delimit multiple words with a | ." );
String b = input.nextLine();
String[] words = b.split("|");
for (String word: words )
{
String[] characters = word.split(" ");
for (String character: characters)
{
if (character.isEmpty()) { continue; }
for (int m = 0; m < Morse.length; m++)
{
if (character.equals(Morse[m]))
System.out.print(English[ m ]);
}
}
System.out.print(" ");
}
}
else if ( a.contains("Eng" ))
{
System.out.println("Please enter a sentence in English, and separate each word with a blank space.");
String c = input.nextLine();
c = c.toLowerCase ();
for ( int x = 0; x < English.length; x++ )
{
for ( int y = 0; y < c.length(); y++ )
{
if ( English [ x ] == c.charAt ( y ) )
System.out.print ( Morse [ x ] + " " );
}
}
}
else
{
System.out.println ( "Invalid Input" );
}
}
}
2 ответа
Здесь этот код будет работать для вас, у вас был неправильный код на английский язык Морзе, я тоже это исправил
public static void main(String[] args) {
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' };
String [] Morse = { ".-" , "-..." , "-.-." , "-.." , "." , "..-." , "--." , "...." , ".." , ".---" , "-.-" , ".-.." , "--" , "-." , "---" , ".--." , "--.-" , ".-." , "..." , "-" , "..-" , "...-" , ".--" , "-..-" , "-.--" , "--.." , "|" };
Scanner input = new Scanner (System.in);
System.out.println( "Please enter \"MC\" if you want to translate Morse Code into English, or \"Eng\" if you want to translate from English into Morse Code" );
String a = input.nextLine();
if ( a.equalsIgnoreCase("MC"))
{
System.out.println( "Please enter a sentence in Morse Code. Separate each letter/digit with a single space and delimit multiple words with a | ." );
String b = input.nextLine();
String[] words = null;
if(b.contains("|")){
words = b.split("[|]");
}else{
words = new String[1];
words[0] = b;
}
for (String word: words )
{
String[] characters = word.split(" ");
for(int h = 0;h < characters.length;h++){
for(int i = 0;i < Morse.length;i++){
if(characters[h].equals(Morse[i])){
System.out.print(English[i]);
}
}
}
System.out.print(" ");
}
}
else if ( a.contains("Eng" ))
{
System.out.println("Please enter a sentence in English, and separate each word with a blank space.");
String c = input.nextLine();
c = c.toLowerCase ();
for ( int x = 0; x < c.length(); x++ )
{
for ( int y = 0; y < English.length; y++ )
{
if ( English [ y ] == c.charAt ( x ) )
System.out.print ( Morse [ y ] + " " );
}
}
}
else
{
System.out.println ( "Invalid Input" );
}
}
Исходя из моего комментария: вам действительно нужно сделать домашнее задание, прежде чем задавать такой вопрос.
Все ответы можно найти в руководстве по Java: https://docs.oracle.com/javase/tutorial/java/data/strings.html
Более конкретно, вы хотите знать, как управлять строкой: https://docs.oracle.com/javase/tutorial/java/data/manipstrings.html
В соответствии с учебными пособиями, вот основной пример, показывающий, как вы можете достичь того, что вы хотите:
if ( a.equalsIgnoreCase("MC"))
{
System.out.println( "Please enter a sentence in Morse Code. Separate each letter/digit with a single space and delimit multiple words with a | ." );
//Example input string
String b = ".... . .-.. .-.. --- | .-- --- .-. .-.. -.. | .. -. | -- --- .-. ... ." ;
//We cant use the split method here because it removes blank spaces, so lets keep it basic:
//String[] words = b.split("|");
int letterStart = 0;
int letterEnd = 0;
String letter = "";
while (letterStart < b.length())
{
letterEnd = b.indexOf(" ", letterStart);
//check if end of string has been reached
if (letterEnd == -1)
{
//grab last morse letter/sequence
letter = b.substring(letterStart);
}
else
{
//grab next morse letter/sequence
letter = b.substring(letterStart, letterEnd);
}
//convert each morse sequence to english
for (int m = 0; m < Morse.length; m++)
{
if (letter.equals("|"))
{
//show spaces between words
System.out.print(" ");
break;
}
else if (letter.equals(Morse[m]))
{
//show english letter
System.out.print(English[m]);
break;
}
}
if (letterEnd == -1)
{
break;
}
letterStart = letterEnd+1;
}
}