莫尔斯电码到英语,(如果声明?)
英文莫尔斯电码部分工作正常,但莫尔斯电码到英语不......我不断收到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;
}
}
}
}
}
}}
而不是一次扫描莫尔斯短语一个字符,而是使用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;
}
}
}
我得到了不同的输出,我认为它与我的括号有关 – 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的
后我认为这将是一个更好的评论,除非你想扩大这个答案并演示如何实施你的建议。 – 2014-12-06 02:54:48
迈通... – 2014-12-06 02:44:08
编写单元测试。 – 2014-12-06 02:44:52
莫尔斯码不能以其连接形式解码。你需要知道每封信的差距在哪里。比较E和T与S和O来看看我的意思。 – Phil 2014-12-06 02:54:06