我最近有一项工作,将英语转换为摩尔斯电码,将莫尔斯电码转换为英语。输入摩尔斯电码时,我的老师希望用1个空格分隔单个字母,用' |'分隔单词。例如, - --- | -...是"是。"我能够让英语到莫尔斯完美地工作,但我对莫尔斯英语不知所措。我不知道如何让for循环停在正确的位置,并将其与数组中的一个代码匹配。
只是旁注,我的老师不喜欢Scanner,所以他使用自己的输入系统。我熟悉他的方法,因此我们将不胜感激
public class Project1
{
public static void main( String [] args )
{
String morse[] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..",
"--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",
"|",".---","..---","...--","....-",".....","-....","--...","---..","----.","-----"};
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890";
String inputType = new String();
inputType = Input.getString( "Is your phrase in Morse Code or English? Enter 'morse' for Morse Code and 'english' for English" );
if( inputType.equalsIgnoreCase("morse") )
morseToEnglish(alphabet, morse);
else if( inputType.equalsIgnoreCase("english") )
englishToMorse(alphabet, morse);
else
System.out.println("Your entry is invalid");
}
public static void englishToMorse(String alphabet, String morse[])
{
String phrase = Input.getString("Enter your english phrase.");
phrase = phrase.toUpperCase();
for( int i = 0; i < phrase.length(); i++ )
{
if( phrase.charAt(i) == ' ' )
{
System.out.print("| ");
continue;
}
for( int j = 0; j < alphabet.length(); j++ )
{
if( alphabet.charAt(j) == phrase.charAt(i) )
{
System.out.print( morse[j] + " " );
break;
}
}
}
}
public static void morseToEnglish(String alphabet, String morse[])
{
String morseCode = Input.getString("Enter a phrase in morse code.");
for( int i = 0; i < morseCode.length(); i++ )
{
for( int j = 0; j < morse.length; j++ )
{
if ( morse[j] == morseCode.charAt(i))
System.out.print( alphabet.charAt(j) );
}
}
}
}
任何指针都将非常感激。哦,对不起,如果morseToEnglish代码看起来不连贯和不好,我已经尝试了很多不同的东西而且不知所措。
答案 0 :(得分:4)
我建议使用String.split()。您可以拆分|,然后在空格上进一步拆分。带有toString()的枚举类型可以帮助分割转换逻辑(如果你不知道开关,这是学习它们的好机会)。然后根据需要连接字符串添加空格。
String.Split()是一个了不起的工具。学习它会使你受益匪浅。
答案 1 :(得分:2)
morseToEnglish应该与englishToMorse算法相反。
就像之前一样,你可以通过强大的输入循环。不同之处在于莫尔斯的多个角色构成一个单一的英文角色。因此,跟踪局部变量中的那些。当您在莫尔斯找到一个空间时,找到匹配的英文字符。您可以遍历您的北欧数组寻找匹配项,或者在查找键是莫尔斯符号(类似于HashTable)的位置进行单独映射。当你找到一个竖线字符时,在找到你的局部变量中的字符后,你应该在继续之前添加一个英文空格来表示单词的边缘。