我在StackOverflow上寻找可能回答我的问题的其他示例,但其他问题中的答案都没有集中在嵌套for循环上。我正在制作摩尔斯电码转换器,如果我这样做,程序本身就可以正常工作:
public static void StringtoMorse(String str){
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 [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "|"};
for (int i = 0; i < str.length(); i ++){
for (int j = 0; j < Alphabet.length; j ++){
if (str.charAt(i) == Alphabet[j]){
System.out.print(MorseCode[j] + " ");
}
}
}
}
但我想制作方法,以便它返回String(MorseCode [j] +&#34;&#34;)。所以这就是我编辑我的方法的方法:
public static String StringtoMorse(String str){
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 [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "|"};
for (int i = 0; i < str.length(); i ++){
for (int j = 0; j < Alphabet.length; j ++){
if (str.charAt(i) == Alphabet[j]){
return(MorseCode[j] + " ");
}
}
}
}
但是这会导致编译错误。错误说&#34;此方法必须返回String&#34;类型的结果,但我认为(MorseCode [j] +&#34;&#34;)是字符串类型。 我知道MorseCode [j]必须是一个String,因为我已经将MorseCode定义为String数组。
如果我使用第一种方法(使用System.out.println()方法),它会正确返回结果。
答案 0 :(得分:5)
你的方法也必须在for循环之后有一个return语句,以防万一从未输入for循环或者输入String包含的字符与Alphabet
中的任何一个都不匹配(在这种情况下{ {1}}条件永远不会真实。)
if
但是,我不确定你的方法是否符合你的要求,因为它只返回输入String中第一个字符的摩尔斯电码。您可能希望将整个输入字符串转换为Morse。
这是一个将整个输入字符串转换为Morse的替代实现:
public static String StringtoMorse(String str){
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 [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "|"};
for (int i = 0; i < str.length(); i ++){
for (int j = 0; j < Alphabet.length; j ++){
if (str.charAt(i) == Alphabet[j]){
return(MorseCode[j] + " ");
}
}
}
return null;
}
当然,你可以提高效率并消除内循环:
public static String StringtoMorse(String str){
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 [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "|"};
StringBuilder morse = new StringBuilder();
for (int i = 0; i < str.length(); i ++){
for (int j = 0; j < Alphabet.length; j ++){
if (str.charAt(i) == Alphabet[j]){
morse.append(MorseCode[j]);
morse.append(' ');
}
}
}
return morse.toString();
}