【问题标题】:Error: Unreachable statement and Missing return statement? [duplicate]错误:无法访问的语句和缺少返回语句? [复制]
【发布时间】:2018-03-02 05:15:36
【问题描述】:

我正在尝试创建一个重写的 compareTo 方法,该方法将比较两个字符串值并按字母顺序排序,我正在尝试递归地实现它,但是我的 return 和 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);
    }

我在底部的递归 if 语句中收到编译器错误“无法访问的语句”,以及来自同一个 if 块的“缺少返回语句”。

【问题讨论】:

  • 在你 return 0; - return compareTo(string1,string2); 之后变得无法访问,因此出现错误。

标签: java recursion return


【解决方案1】:
  1. 你得到了,

“无法到达的语句”

因为在 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. 你得到了,

“缺少返回语句”

因为,您不会为所有情况返回一个值。比如下面的说法是假的怎么办?

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

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

    私有静态 int 索引 = 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();
    }
    

    }

【讨论】:

    【解决方案2】:

    关于您收到 Unreachable 声明的原因:

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

    关于您为什么会收到缺少的 return 语句: 如果三个块中没有一个条件为真,那么您在它们之外没有返回语句,因此编译器会抱怨这个缺少的返回。 您必须在所有内容中添加最后一个 return 声明。

    关于算法..我认为您的想法完全是错误的,并且行不通..尝试使用其他算法重写。

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

    如果 char1

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 2016-01-04
      • 2013-04-27
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多