在我的代码中,它显示警告,消息“100”是一个幻数。请参阅以下代码,
int randomNo = generator.nextInt(100);
我在这里阅读What is a magic number, and why is it bad?,但我怀疑是通过创建带静态的变量来声明100会占用更多的空间,因为我在一个地方使用它。这是解决这个问题的正确方法吗?
public static final int HUNDRED= 100;
有任何建议吗?
答案 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而不是高于(或低于)?
总结一下,对于您自己以及代码的当前或未来读者来说,这是您的代码的可读性,这是编码风格的问题。