错误:无法访问的语句和缺少返回语句?

时间:2017-09-21 01:28:15

标签: java recursion return

我正在尝试创建一个重写的compareTo方法,它将比较两个字符串值和排序,它首先按字母顺序排列,我试图以递归方式实现它,但我遇到了返回和if语句的问题:

public class Recursion{

private static int index = 0;

public static int compareTo(String string1,String string2){
    char character1 = string1.toLowerCase().charAt(index);
    char character2 = string2.toLowerCase().charAt(index);

    if (character1 < character2 || string1.length() > string2.length()){
        System.out.println("String 1 comes after String 2");
        return -1;

    }
    else if(character1 > character2 || string1.length() < string2.length()){
        System.out.println("String 1 comes before String 2");
        return 1;
    }
    if (string1.length() == string2.length()){
        index ++;
        System.out.println("Index is " +index);
        return 0;
        return compareTo(string1,string2);
    }

我在底部的recursive if语句中遇到编译器错误“Unreachable statement”,以及来自同一if块的“missing return statement”。

2 个答案:

答案 0 :(得分:1)

  1. 你好,
  2.   

    “无法访问的声明”

    因为在if条件中你返回0所以,后续

      

    return compareTo(string1,string2);

    无法访问。

        if (string1.length() == string2.length()){
            index ++;
            System.out.println("Index is " +index);
            return 0;
            return compareTo(string1,string2);
        }
    
    1. 你好,
    2.   

      “缺少退货声明”

      因为,您没有为所有案例返回值。如果下面的陈述是假的怎么办?

        

      if(string1.length()== string2.length()){

      1. 我不认为你的算法是正确的。请查看以下示例供您参考。

        private static int index = 0;

        public static int compareTo(String string1,String string2){     // char character1 = string1.toLowerCase()。charAt(index); //字符串索引超出范围:可能发生错误     // char character2 = string2.toLowerCase()。charAt(index); //字符串索引超出范围:可能发生错误

        char character1, character2;
        
        int maxIndex=-1;
        
        if(string1.length()<=string2.length()) {
            maxIndex=string1.length()-1;
        } else {
            maxIndex=string2.length()-1;
        }
        
        if(index<=maxIndex) {
            character1 = string1.toLowerCase().charAt(index);
            character2 = string2.toLowerCase().charAt(index);
        
            if (character1!=character2) {
                return character1-character2;
            } else {
                if(index==maxIndex) {
                    return string1.length()-string2.length();
                } else {
                    ++index;
                    return compareTo(string1,string2);
                }
            }
        } else {
            return string1.length()-string2.length();
        }
        

        }

答案 1 :(得分:0)

关于您获取无法访问声明的原因:

return 0
return compareTo(string1,string2) <<<<< this line is unreachable because of the above return 0;

关于您获得遗失的退货声明的原因: 如果三个块中没有一个条件为真,那么在它们之外没有返回语句,因此编译器正在抱怨这个丢失的返回。 你必须从最后的一切中提出最后一句话。

关于算法..我认为你的想法是一个完全错误而且无效。试着用其他算法重写。

if (character1 < character2 || string1.length() > string2.length()){

如果char1&lt;

为什么你返回-1 char2或string1的字符数少于string2?我无法弄清楚字符串的大小与按字母顺序排序有什么关系。