英语到摩尔斯的代码部分工作得很好,但是英语的摩尔斯代码没有.我一直得到E和T的代码,有什么方法可以让我们知道,如果在morse代码字母之间有一个空格,它就可以知道它们是不同的字母,而不是每一个字母。
我试图让我的代码检查空格,当它从莫尔斯代码到英语,它不能正常工作。
这是我的完整代码:
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;
}
}
}
}
}
}}发布于 2014-12-06 02:51:12
不要一次只扫描一个字符,而是使用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;
}
}
}发布于 2014-12-06 02:50:36
我认为最简单的方法是创建一张地图:
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。
发布于 2014-12-06 02:51:30
我想你是在找java.util.StringTokenizer
https://stackoverflow.com/questions/27327711
复制相似问题