首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >摩尔斯电码为英文,(如声明?)

摩尔斯电码为英文,(如声明?)
EN

Stack Overflow用户
提问于 2014-12-06 02:36:39
回答 3查看 447关注 0票数 0

英语到摩尔斯的代码部分工作得很好,但是英语的摩尔斯代码没有.我一直得到E和T的代码,有什么方法可以让我们知道,如果在morse代码字母之间有一个空格,它就可以知道它们是不同的字母,而不是每一个字母。

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

这是我的完整代码:

代码语言:javascript
复制
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;
                   }
                }


            }

        } 



}
    }}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-06 02:51:12

不要一次只扫描一个字符,而是使用StringTokenizer或扫描仪在空格处将其拆分。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-12-06 02:50:36

我认为最简单的方法是创建一张地图:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-12-06 02:51:30

我想你是在找java.util.StringTokenizer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27327711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档