2015-01-14 2 views
-2

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

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

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

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! 

ответ

5

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

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

if ((lengthBeg != lengthEnd)) { 
    // Do nothing 
} 
{ 
    return false; 
} 
return true; // Unreachable because we already returned false 
+0

, если вы можете объяснить, почему я бы голосовать U до –

+1

@KickButtowski Done –

+1

Gee, это правильно! Огромное спасибо! –

Смежные вопросы