Почему компилятор не распознает мои операторы return? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть следующий фрагмент кода:

public static boolean isReverse (String s1, String s2) {    
    if((s1.length()==1)&&s2.length()==1) {          
        if(s1.equals(s2)) {             
            return true;
        }
    }       
    else if(s1.charAt(0)==s2.charAt(s2.length()-1)) {           
        return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
    }       
    else return false;  
}

Я понимаю, что обычно вам требуется оператор return, чтобы скрыть возможность того, что ни один из операторов if не будет истинным.Вот почему у меня есть else return false в конце, но я все еще получаю сообщение об ошибке «должен вернуть результат типа boolean».Вот звонок, с которого я его использую:

public static void main(String[] args) {
    if(isReverse("Java", "avaJ")) {
        System.out.println("worked");
    }
}

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Первый if имеет вложенное условие if, которое приводит к ответвлению, в которое вы ничего не возвращаете.Вы можете удалить последний else и сделать его return false; по умолчанию.Или просто измените вложенные if в a return.То есть, измените это

if((s1.length()==1)&&s2.length()==1) {
    if(s1.equals(s2)) {
        return true;
    }
}

на просто (переопределены отступы и супрафлюзы удалены)

if (s1.length() == 1 && s2.length() == 1) {
    return s1.equals(s2);
}

Мы могли бы также переопределить метод с StringBuilder в одной строке, как

public static boolean isReverse(String s1, String s2) {
    return new StringBuilder(s1).reverse().toString().equals(s2);
}
0 голосов
/ 16 октября 2018
public static boolean isReverse (String s1, String s2) {    
    if(s1.length()==1&&s2.length()==1) {          
        if(s1.equals(s2)) {             
            return true;
        } else {
            return false; // This portion need to be return some result.
        }
    }       
    else if(s1.charAt(0)==s2.charAt(s2.length()-1)) {           
        return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
    }       
    else return false;  
}

Или

public static boolean isReverse (String s1, String s2) {    
    if(s1.length()==1&&s2.length()==1) {          
        if(s1.equals(s2)) {             
            return true;
        }
    }       
    else if(s1.charAt(0)==s2.charAt(s2.length()-1)) {           
        return isReverse(s1.substring(1, s1.length()-1),s2.substring(0, s2.length()-2));
    }       
    return false;  // Just return the result without else
}
0 голосов
/ 16 октября 2018

В первом if существует вероятность того, что не будет оператора return:

if((s1.length()==1)&&s2.length()==1) {
    //What if this is not true?
    if(s1.equals(s2)) {
        return true;
    }
}

В этом блоке, если s1 не равно s2, тогда он выйдет изif, и поскольку последний return false; связан с блоком else, он достигнет конца метода, возвращать нечего.

Чтобы исправить это вместо else return false, просто return false;

...