IntelliJ IDEA警告“永远不会使用值”

时间:2015-09-08 16:16:59

标签: java intellij-idea int warnings helper

我写了一个方法来计算一个单词的最大排列量,但是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

3 个答案:

答案 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);

因此我们不假设该变量从未使用过,因为我们假设此方法的调用者将读取此方法返回的值,但对变量的赋值是无用的。