带有警告“100”的CheckStyle是一个幻数

时间:2015-05-05 05:18:48

标签: java checkstyle

在我的代码中,它显示警告,消息“100”是一个幻数。请参阅以下代码,

int randomNo = generator.nextInt(100);

我在这里阅读What is a magic number, and why is it bad?,但我怀疑是通过创建带静态的变量来声明100会占用更多的空间,因为我在一个地方使用它。这是解决这个问题的正确方法吗?

  public static final int HUNDRED= 100;

有任何建议吗?

4 个答案:

答案 0 :(得分:13)

好吧HUNDRED真的有点傻,但你为什么选择100以及它的含义是什么?

类似的东西:

public static final int RANDOM_UPPER_LIMIT=100;

或更具信息性的内容,具体取决于您使用的值:

public static final int MAX_NUMBER_OF_COLORS=100;

会更有意义并提高可读性。

在这种情况下,不应考虑节省空间,声明变量的空间开销(如果有的话)完全可以忽略不计。

答案 1 :(得分:6)

它与存储及其可读性无关。如果你想改变一些数字,很难在代码中找到,如果它在顶部,那么它会更好(如果它在配置文件中,在许多情况下更好) )。

是的,这是一个很好的解决方案。

如果你不在该文件之外需要它,你应该把它变成'#34;私有",你可能想要更具可读性并使用一个名称来表明它的真正含义,比如:

MAX_RANDOM_NUMBER=100

更好地包括它用于

的内容
MAX_RANDOM_FOR_CARD_SELECTION

或类似的东西。

通过这种方式,当您从现在起5个月后查看该文件时,因为您添加了20张新卡,您甚至无需查看代码即可完全明白需要更改的内容。

答案 2 :(得分:1)

编写不是最短的代码,但编写易于理解和维护的代码是件好事。将此100存储为常数,您可以添加一个好名称来解释它为何真正100。例如,如果您想生成随机分数并且您的最大可能分数为100,那么您可以定义

static final int MAX_SCORE = 100;

之后你也可以在其他地方使用它。每个人都会理解为什么它是100而不是别的。如果有一天你需要将它更改为200,那么你将不得不在一个地方更换它而不需要搜索代码。

也有可能在你的程序的其他部分你将拥有100个具有不同含义的东西(比如MAX_PERCENT)。如果您想将MAX_SCORE更改为200,但保留MAX_PERCENT,则如果您有单独的常量会更容易。

答案 3 :(得分:1)

查看罗伯特·马丁(鲍勃叔叔)

  

清洁代码

预订详尽的解释(或任何其他编码风格指南)。基本上硬编码的'100'对你的代码的读者没有任何意义。在您完成应用程序后,在6个月内对您没有任何意义。这是一个神奇的数字,因为它出现在代码中 - 在100个案例中的99个 - 几乎无处不在。为什么它是100而不是99或101?为什么您的应用将随机数生成限制为100而不是高于(或低于)?

总结一下,对于您自己以及代码的当前或未来读者来说,这是您的代码的可读性,这是编码风格的问题。