Странная ошибка недостижимого кода в Java

Я пишу программу, которая определяет, сертифицирована ли строка "xyz" во входной строке или нет. Я создаю переменную, которая хранит положение "xyz" с циклом for, а затем сравниваю ее с числом символов до и после, создавая целые числа с.substring() и.length(). Как ни странно, код не компилируется после первого if -, которое возвращает true или false, говоря, что любое возвращаемое выражение после этого недоступно. Может ли кто-нибудь помочь мне обернуть голову вокруг этого?

Большое спасибо!

Может быть, потому что переменные длины еще не запускались и для компилятора они всегда будут разными? Как это решить?

public static boolean xyzCenter(String str){ 

//identifies the position of "xyz" within the String.
int xyzPosition=1;

//loops through the string to save the position of the fragment in a variable.
for(int i = 0; i<str.length(); ++i){
    if(str.length()>i+2 && str.substring(i, i+3).equals("xyz")){
        xyzPosition=i;
    }
}

//ints that determine the length of what comes before "xyz", and the
length of what comes after.
int lengthBeg = str.substring(0, xyzPosition).length(); 
int lengthEnd = str.substring(xyzPosition+3, str.length()).length();

if ((lengthBeg != lengthEnd));{
    return false;
} //this compiles.

return true; //this doesn't!

1 ответ

if ((lengthBeg != lengthEnd)); <----- remove that semicolon

Когда вы ставите точку с запятой в конце if это как пустой if блок. Ваш код эквивалентен

if ((lengthBeg != lengthEnd)) {
    // Do nothing
}
{
    return false;
}
return true; // Unreachable because we already returned false
Другие вопросы по тегам