莫尔斯电码到英语,(如果声明?)

莫尔斯电码到英语,(如果声明?)

问题描述:

英文莫尔斯电码部分工作正常,但莫尔斯电码到英语不......我不断收到E和T的,有没有办法使如果在莫尔斯电码字母之间有一个空格,它会知道它们是不同的字母,而不是每个“。”。 = E和每个“ - ”= T莫尔斯电码到英语,(如果声明?)

我试图让我的代码检查空间,当它从莫尔斯码到英文,它不能正常工作。

继承人我全码:

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

迈通... – 2014-12-06 02:44:08

+0

编写单元测试。 – 2014-12-06 02:44:52

+0

莫尔斯码不能以其连接形式解码。你需要知道每封信的差距在哪里。比较E和T与S和O来看看我的意思。 – Phil 2014-12-06 02:54:06

而不是一次扫描莫尔斯短语一个字符,而是使用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 2014-12-06 03:27:53

我认为最简单的事情就是创建一个地图:

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。

我觉得你在调试器是java.util.StringTokenizer的

+0

我认为这将是一个更好的评论,除非你想扩大这个答案并演示如何实施你的建议。 – 2014-12-06 02:54:48