2014-12-06 2 views
0

Часть кода на английском языке в morse отлично работает, но код Морзе на английском языке не ... Я продолжаю получать E и T, есть ли способ сделать так, чтобы if есть пробел между кодовыми буквами Морзе, он будет знать, что они разные буквы, а не все. = E и каждый «-» = TКод Морзе на английском языке, (если заявление?)

Я пытаюсь проверить свой код на наличие пробелов, когда он переходит от кода Морзе к английскому, его работа не работает должным образом.

Heres мой полный код:

import java.util.Scanner; 

public class MorseCode { 
    public static void main(String [] args){ 


    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"," "}; 
    String Morse [] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----"," "}; 

    //Decide Either English to Morse or Morse to English 



    System.out.println("For English-->Morse (Press 'E')\n" 
        + "For Mosrse-->English (Press 'M')"); 

    Scanner Input = new Scanner(System.in); 
    String Response = Input.next(); 

    //For invalid Input 
    while(!(Response.equalsIgnoreCase("E") || Response.equalsIgnoreCase("M"))){ 
     System.out.println("Invalid input, Please type in E or M"); 
     Response = Input.next(); 
    } 
    //English to Morse-Code 
    if(Response.equalsIgnoreCase("E")){ 

     System.out.println("Type in English"); 
     Input.nextLine(); 
     String Ephrase = Input.nextLine(); 
     Ephrase = Ephrase.toUpperCase(); 

     for(int count = 0; count < Ephrase.length(); count++) 
     { 
      for(int index = 0; index < Alphabet.length; index++) 
      { 
       //Matches English to Morse and Prints 
       if(Ephrase.substring(count, (count+1)).equals(Alphabet[index])) 
        System.out.print(Morse[index] + " "); 
      } 
     } 


    } 
    //Morse-Code to English 
    else if(Response.equalsIgnoreCase("M")){ 

     System.out.println("Type in MorseCode"); 
     Input.nextLine(); 
     String Mphrase = Input.next(); 

     for(int count = 0; count < Mphrase.length(); count++ ) 
     { 
      for (Scanner s = new Scanner(Mphrase); s.hasNext();) { 

       String letter = s.next(); 

       for(int index = 0; index < Morse.length; index++) { 

        if(letter.equals(Morse[index])) { 

         System.out.println(Alphabet[index]); 
         break; 
        } 
       } 


      } 

     } 



} 
    }} 
+0

шаг через отладчик ... –

+0

тесты писать юнит. –

+0

Код Морзе не декодируется в его объединенной форме. Вы должны знать, где пробелы для каждой буквы. Сравните E и T с S и O, чтобы понять, что я имею в виду. – Phil

ответ

0

Вместо того чтобы сканировать вашу морскую фразу по одному символу за раз, используйте StringTokenizer или сканер, чтобы разбить его на пробел.

for (Scanner s = new Scanner(Mphrase); s.hasNext();) { 
    String letter = s.next(); 
    for(int index = 0; index < Morse.length; index++) { 
     if(letter.equals(Morse[index])) { 
      System.out.println(Aplphabet[index]); 
      break; 
     } 
    } 
} 
+0

У меня есть другой выход с этим, я думаю, что это имеет какое-то отношение к моим скобкам. – AAA

0

Я думаю, что самая простая вещь, чтобы создать карту:

int totalLetters = 26; 
HashMap<String, String> englishToMorse = new HashMap<String, String>(totalLetters); 
HashMap<String, String> morseToEnglish = new HashMap<String, String>(totalLetters); 

for (int i = 0; i < Alphabet.length; i++) { 
    englishToMorse.put(Alphabet[i], Morse[i]); 
    morseToEnglish.put(Morse[i], Alphabet[i]); 
} 

Затем, когда вам нужно перевести с одного на другой, разделить слова в предложении и для каждого слова, проверьте соответствующий словарь/HashMap.

0

Я думаю, что вы после java.util.StringTokenizer

+0

Я думаю, что это было бы лучше, чем комментарий, если вы не хотите расширять этот ответ и демонстрировать, как реализовать свое предложение. –

Смежные вопросы