摩尔斯电码转英文:字符类型与字符串类型不可比
Morse Code to English: Character type is not Comparable with String type
我知道这种问题在整个 Whosebug 中很常见,但我的问题要具体得多。在我的程序中,我有 main() 方法,一个工作正常的英语到莫尔斯码方法,以及一个我遇到问题的莫尔斯码到英语方法。
public static void MorsetoString(String Morse, char [] Alphabet, String [] MorseCode){
StringBuffer English = new StringBuffer();
for(int i=0;i < Morse.length(); i++){
if (Morse.charAt(i) != ' '){
for (int j = 0; j < MorseCode.length; j ++){
if (Morse.charAt(i) == MorseCode[j]){
English.append(MorseCode[j]);
English.append(" ");
}
}
}
}
}
这些是在此方法中作为参数的数组:
char 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', ' '};
String MorseCode [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "..-", ".--", "-..-", "-.--", "--..", "|"};
代码还没有完全完成,因为我必须添加 when Morse.charAt(i) == ' '
的语句,但我主要是在这部分遇到了问题。
这段代码的问题在于,当我说if (Morse.charAt(i) == MorseCode[j])
时,我是在比较char类型变量和string类型,所以程序无法编译。我认为我的代码在逻辑方面总体上是可行的,但是有什么方法可以修改代码以便可以比较两者吗?确切的错误消息是“
您不需要比较输入字符串的每个字符。比较刚得到space' '
,因为space在摩尔斯电码中划分字符:
static char 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', ' '};
static String morseCode[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "..-", ".--", "-..-", "-.--", "--..", "|"};
public static void decodeMorse(String morse){
StringBuilder english = new StringBuilder();
int codeLength = 0;
for(int i=0; i<morse.length();i++){
String code = null;
// if we met ' ', we can get previous code
if(morse.charAt(i)==' ' && codeLength>0){
code = morse.substring(i-codeLength, i);
codeLength=0;
}else
// when we reached end of string we have to get previous code
if(i==morse.length()-1 && codeLength>0){
code = morse.substring(i-codeLength, morse.length());
}
else{
codeLength++;
}
// if you got the code, find alphabet char for it
if(code!=null){
for(int j=0; j<alphabet.length; j++){
if(code.equals(morseCode[j])){
english.append(alphabet[j]);
}
}
}
}
System.out.println(english);
}
此外,您不需要在字母字符之间添加 spaces,因为在英语中字母之间不需要 spaces。
我知道这种问题在整个 Whosebug 中很常见,但我的问题要具体得多。在我的程序中,我有 main() 方法,一个工作正常的英语到莫尔斯码方法,以及一个我遇到问题的莫尔斯码到英语方法。
public static void MorsetoString(String Morse, char [] Alphabet, String [] MorseCode){
StringBuffer English = new StringBuffer();
for(int i=0;i < Morse.length(); i++){
if (Morse.charAt(i) != ' '){
for (int j = 0; j < MorseCode.length; j ++){
if (Morse.charAt(i) == MorseCode[j]){
English.append(MorseCode[j]);
English.append(" ");
}
}
}
}
}
这些是在此方法中作为参数的数组:
char 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', ' '};
String MorseCode [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "..-", ".--", "-..-", "-.--", "--..", "|"};
代码还没有完全完成,因为我必须添加 when Morse.charAt(i) == ' '
的语句,但我主要是在这部分遇到了问题。
这段代码的问题在于,当我说if (Morse.charAt(i) == MorseCode[j])
时,我是在比较char类型变量和string类型,所以程序无法编译。我认为我的代码在逻辑方面总体上是可行的,但是有什么方法可以修改代码以便可以比较两者吗?确切的错误消息是“
您不需要比较输入字符串的每个字符。比较刚得到space' '
,因为space在摩尔斯电码中划分字符:
static char 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', ' '};
static String morseCode[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "..-", ".--", "-..-", "-.--", "--..", "|"};
public static void decodeMorse(String morse){
StringBuilder english = new StringBuilder();
int codeLength = 0;
for(int i=0; i<morse.length();i++){
String code = null;
// if we met ' ', we can get previous code
if(morse.charAt(i)==' ' && codeLength>0){
code = morse.substring(i-codeLength, i);
codeLength=0;
}else
// when we reached end of string we have to get previous code
if(i==morse.length()-1 && codeLength>0){
code = morse.substring(i-codeLength, morse.length());
}
else{
codeLength++;
}
// if you got the code, find alphabet char for it
if(code!=null){
for(int j=0; j<alphabet.length; j++){
if(code.equals(morseCode[j])){
english.append(alphabet[j]);
}
}
}
}
System.out.println(english);
}
此外,您不需要在字母字符之间添加 spaces,因为在英语中字母之间不需要 spaces。