IntelliJ IDEA предупреждение "значение никогда не используется"
Я написал метод, который вычисляет максимальное количество перестановок слова, но IntelliJ IDEA дает мне предупреждение:
Длина значения - 1, присваиваемая permutationAmount, никогда не используется
private static int permutationsPossible(String word) {
//Amount of letters in word.
int length = word.length();
//Return length if length is less than or equal to 1.
if (length <= 1)
return length;
//Calculate maximum amount of permutations.
int permutationAmount = length;
for (int i = 1; i < length - 1; i++)
permutationAmount *= (length - i);
return permutationAmount /= length - 1;
}
Тем не менее, предупреждение не отображается, когда я делаю хелпер int следующим образом:
permutationAmount = permutationAmount /= length - 1;
return permutationAmount;
Программа работает в обоих направлениях, все, что я хочу знать, это то, почему IntelliJ предупреждает меня о том, что "length - 1" никогда не используется?
Снимок экрана: https://i.gyazo.com/886d7ab8b06398fb7dd0809a7d1bbaf3.png
3 ответа
Вы назначаете обратно permutationAmount
в заявлении о возврате без причины (причина предупреждения).
return permutationAmount / (length - 1);
сложная часть может заключаться в том, что в то время как это выглядит, как будто вы возвращаете значение permutationAmount
в операторе возврата (и, следовательно, будет читать назначенное значение), вы не. оператор return фактически возвращает результат операции присваивания, и, следовательно, permutationAmount
на самом деле никогда не читается снова после назначения.
Это потому, что вы меняете значение permutationAmount
без причины. Вы не используете новое значение снова после возврата, поэтому нет смысла изменять значение переменной в return
линия. Вместо фактического изменения значения, вы можете сделать то же самое, выполнив
return permutationAmount / length - 1;
Во втором примере вы используете новое значение после изменения, и если вы на самом деле не изменили значение, возвращаемое значение будет неправильным.
Это текст, который появляется, когда я раскрываю поле в IntelliJ с этим предупреждением:
Эта проверка указывает на случаи, когда значение переменной никогда не используется после ее присвоения, то есть:
переменная никогда не будет прочитана после присваивания ИЛИ
значение всегда перезаписывается другим присваиванием перед тем, как следующая переменная прочитает ИЛИ
инициализатор переменной является избыточным (по одной из вышеперечисленных причин) ИЛИ
переменная никогда не используется.
Похоже, что это предупреждение вызвано первой причиной: вы никогда больше не читаете переменную после ее присвоения. Это не имеет особого смысла, потому что вы немедленно возвращаете переменную.
Однако не имеет смысла присваивать значение локальной переменной, а затем немедленно возвращать его. Эта строка будет выполнять ту же логику без присваивания переменной:
return permutationAmount / (length - 1);
Так что это не значит, что переменная никогда не используется, потому что мы предполагаем, что вызывающая сторона этого метода будет читать значение, возвращаемое этим методом, но присвоение переменной бесполезно.