Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 幻数:检查幻数_Java - Fatal编程技术网

Java 幻数:检查幻数

Java 幻数:检查幻数,java,Java,我在声纳上得到这个警告是违法的。我需要正确的解决方案来消除声纳上的警告 我的代码如下: void method(){ try { int x; x=5; } catch{ //handling code } } 我收到了类似以下代码的警告: '5' is a magic number. 因此,我需要适当的解决方案来删除此类警告。幻数是直接使用代码中的数字(即,在您的案例中,代码中的硬编码数字直接使用5) 要消除警告,请尝试以下操作: int x; static fi

我在声纳上得到这个警告是违法的。我需要正确的解决方案来消除声纳上的警告

我的代码如下:

void method(){
try {
  int x;
  x=5;
 }
 catch{
    //handling code
 }
}
我收到了类似以下代码的警告:

'5' is a magic number.

因此,我需要适当的解决方案来删除此类警告。

幻数是直接使用代码中的数字(即,在您的案例中,代码中的硬编码数字直接使用5)

要消除警告,请尝试以下操作:

 int x;
 static final int SOME_NUMBER=5;
 x=SOME_NUMBER;

Sonar要求你通过给它一个名字来记录你为什么使用那个特定的号码。您可以通过声明一个常量(具有表示性名称)来实现:

然后使用该常数而不是“魔法”数,从而更清楚地表达该赋值的意图:

x = NUMBER_OF_RETRIES;

这还有一个好处,即如果需要更改重试次数,您可以在一个地方进行更改,而不是在使用“神奇”数字的任何地方进行更改。

好吧,我知道这个问题已经得到了令人满意的回答,但我想在这里添加自己的声纳解释,因为它非常详细:

一个神奇的数字是一个不知从何而来的数字,并且是直接的 在陈述中使用。魔术数字经常被使用,例如 限制循环的迭代次数,以测试循环的值 财产等

当你在工作时,使用魔法数字似乎是显而易见的 写一段代码,但它们不那么明显和简单 在调试时非常简单

这就是为什么神奇的数字必须先被分配才能解开谜团 在使用变量之前要清楚地命名变量

-1、0和1不被视为幻数

不合规代码示例

public static void doSomething() {
  for(int i = 0; i < 4; i++){                 // Noncompliant, 4 is a magic number
      ...
  }
}
publicstaticvoiddosomething(){
对于(int i=0;i<4;i++){//Noncompliant,4是一个幻数
...
}
}
兼容解决方案

public static final int NUMBER_OF_CYCLES = 4;
public static void doSomething() {
  for(int i = 0; i < NUMBER_OF_CYCLES ; i++){
    ...
  }
}
公共静态最终整数循环数=4;
公共静态无效剂量测定法(){
for(int i=0;i
例外情况

此规则忽略hashCode方法


用描述性名称在某个地方声明一个
静态final int
,然后直接使用它而不是
5
?而是一次性声明它<代码>整数x=5或使用
@SuppressWarning
public static final int NUMBER_OF_CYCLES = 4;
public static void doSomething() {
  for(int i = 0; i < NUMBER_OF_CYCLES ; i++){
    ...
  }
}