无法从嵌套的for循环返回String

时间:2016-02-24 14:31:36

标签: java for-loop return

我在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()方法),它会正确返回结果。

1 个答案:

答案 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();
}