我写了一个方法来计算一个单词的最大排列量,但是IntelliJ IDEA给了我警告:
永远不会使用分配给'permutationAmount'的值长度<1
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警告我'长度 - 1'从未使用过?
屏幕截图:https://i.gyazo.com/886d7ab8b06398fb7dd0809a7d1bbaf3.png
答案 0 :(得分:3)
您无缘无故地在返回语句中分配回permutationAmount
(警告的原因)。
return permutationAmount / (length - 1);
棘手的部分可能是,当看起来像,就像你在return语句中返回permutationAmount
的值(因此将读取指定的值)时,你不是。 return语句实际返回赋值操作的结果,因此permutationAmount
在分配后永远不会再次读取。
答案 1 :(得分:1)
这是因为您无缘无故地更改了permutationAmount
的值。返回后您没有再次使用新值,因此您无需更改return
行中变量的值。而不是实际更改值,您可以通过执行
return permutationAmount / length - 1;
在第二个示例中,您在更改后使用新值,如果您实际上没有更改该值,则返回错误。
答案 2 :(得分:1)
这是我在IntelliJ上展开此警告框时出现的文字:
该检查指出了在赋值后从未使用变量值的情况,即:
- 后永远不会被读取
变量OR
- 之前,该值始终会被另一个赋值覆盖
在下一个变量read OR
变量初始化程序是多余的(出于上述两个原因之一)或
永远不会使用该变量。
由于第一个原因,似乎触发了此警告:在分配变量后,您再也不会再读取该变量。这没有多大意义,因为你立即返回变量。
但是,为局部变量赋值然后立即返回它没有多大意义。该行将执行相同的逻辑,而不分配给变量:
return permutationAmount / (length - 1);
因此我们不假设该变量从未使用过,因为我们假设此方法的调用者将读取此方法返回的值,但对变量的赋值是无用的。