Подтвердить что ты не робот

Предупреждение о мертвом коде?

Почему я получаю предупреждение об ошибке в я ++ в этой функции?

InputFilter hexInputFilter()
    {
    return new InputFilter()
        {
            @Override
            public CharSequence filter(CharSequence source, int start,
                    int end, Spanned dest, int dstart, int dend)
                {
                for (int i = start; i < end; i++)
                    {
                    if ((source.charAt(i) >= '0')
                            && (source.charAt(i) <= '9'))
                        {
                        return null;
                        }
                    if ((Character.toUpperCase(source.charAt(i)) >= 'A')
                            && (Character.toUpperCase(source.charAt(i)) <= 'F'))
                        {
                        return null;
                        }
                    return "";
                    }
                return null;
                }
        };
    }
4b9b3361

Ответ 1

Нет никаких шансов для цикла for для цикла больше, чем один раз, потому что вы возвращаетесь:

return "";

Таким образом, i++ не будет выполняться никогда и почему вы получаете предупреждение о мертвом коде. Возможно, вы хотите удалить этот return ""; и/или поместить его вне for.

Ответ 2

Это потому, что i++ обычно выполняется после окончания блока for, а в вашей функции конец блока блокировки никогда не будет достигнут, потому что в блоке вы безоговорочно возвращаете значение.

A для цикла

for (A; B; C) {
  D;
}

внутренне переведено на следующее:

A;
while (B) {
  D;  
  C;
}

Вы можете видеть, что если D всегда возвращается из функции, C никогда не будет достигнуто. Вот о чем идет речь.

Ответ 3

Вы будете выполнять цикл только один раз из-за инструкции return "";.

Ответ 4

В вашем случае приведенный ниже оператор вызывает проблему, поскольку она выполняется безоговорочно и всегда будет выполняться при выполнении цикла for. Поэтому он никогда не достигнет я ++, поэтому его мертвый код.

return "";