gpt4 book ai didi

java - SonarQube 报告删除此表达式,其计算结果始终为 “true”

转载 作者:行者123 更新时间:2023-12-03 08:49:25 32 4
gpt4 key购买 nike

我有以下代码:

final Set<String> desktopMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.DESKTOP);
final Set<String> mobileMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.MOBILE);
final Set<String> tabletMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.TABLET);

//In case they are the same, only default.
if (desktopMediaCodes.equals(mobileMediaCodes) && mobileMediaCodes.equals(tabletMediaCodes)) {
asset.setDefaults(desktopMediaCodes);
return;
}

//In case three are different, we will send mobile, desktop and tablet.
if(!desktopMediaCodes.equals(mobileMediaCodes) && !desktopMediaCodes.equals(tabletMediaCodes) && !mobileMediaCodes.equals(tabletMediaCodes)){
asset.setDesktop(desktopMediaCodes);
asset.setMobile(mobileMediaCodes);
asset.setTablet(tabletMediaCodes);
return;
}

//In case only tablet is different, we will send default and tablet.
if(desktopMediaCodes.equals(mobileMediaCodes) && !mobileMediaCodes.equals(tabletMediaCodes)){
asset.setDefaults(desktopMediaCodes);
asset.setTablet(tabletMediaCodes);
return;
}

//In case only desktop is different, we will send default and tablet.
if(mobileMediaCodes.equals(tabletMediaCodes) && !tabletMediaCodes.equals(desktopMediaCodes)){
asset.setDefaults(mobileMediaCodes);
asset.setDesktop(desktopMediaCodes);
return;
}

//In case only mobile is different, we will send default and tablet.
if(tabletMediaCodes.equals(desktopMediaCodes) && !tabletMediaCodes.equals(mobileMediaCodes)){
asset.setDefaults(tabletMediaCodes);
asset.setMobile(mobileMediaCodes);
return;
}

SonarQube 向我报告了这一点

screen with issues

(黄色字段)

事实并非如此,这是一个错误还是我遗漏了什么? SonarQube 让我很困惑。

最佳答案

您需要阅读整个上下文。您的代码中有 5 个 if 语句。我会稍微简化一下:

1) D == M && M == T

2) D != M && D != T && M != T

3) D == M && M != T

4) M == T && D != T

5) D == T && D != M

让我们分析一下代码。

第一期

它通知您 M != T始终评估为 true在第三行:

3) D == M && M != T
为什么?因为你的第一行是:

1) D == M && M == T

它保证第三行中只有以下值可能:

D == M && M != T
D != M && M != T
D != M && M == T

你可以理解为:

  • 如果 D == M然后M必须是!= T (检查 M != T 没有意义)
  • 如果 D != M然后M可能是 = 或 != T (我们必须检查 M = 或 != T )

新代码是:

1) D == M && M == T

2) D != M && D != T && M != T

3) D == M

4) M == T && D != T

5) D == T && D != M

第二期

与第一期的情况相同。 D != T始终评估为 true在第四行:

4) M == T && D != T

因为第三行:

3) D == M

保证D != M 。第二行:

2) D != M && D != T && M != T

保证:

D == T && M != T
D != T && M == T
D == T && M == T

我们将删除第三个选项,因为第一行捕获了它:

1) D == M && M == T

现在我们有:

D == T && M != T
D != T && M == T

你可以理解为:

  • 如果 D == M然后M必须是!= T (检查 M != T 没有意义)
  • 如果 D != M然后M必须是 = T (检查 M == T 没有意义)

新代码是:

1) D == M && M == T

2) D != M && D != T && M != T

3) D == M

4) M == T

5) D == T && D != M

第三期和第四期

整个 if 条件的计算结果始终为 true 。我们来读一下第五行:

5) D == T && D != M

M != D总是正确的,因为第三行保证了它:

3) D == M

新代码是:

1) D == M && M == T

2) D != M && D != T && M != T

3) D == M

4) M == T

5) D == T

我们还可以删除 D == T因为:

3) D == M
4) M == T

在第 5 行,只能使用以下选项:D != M && M != T 。第二行是:

2) D != M && D != T && M != T

如果D != T然后第二行捕获它。这意味着唯一的可能性是 D == T ,所以检查它是没有意义的。

最终代码

final Set<String> desktopMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.DESKTOP);
final Set<String> mobileMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.MOBILE);
final Set<String> tabletMediaCodes = getCodesByMediaDeviceType(mediaModels, MediaDeviceType.TABLET);

// In case they are the same, only default.
if (desktopMediaCodes.equals(mobileMediaCodes) && mobileMediaCodes.equals(tabletMediaCodes)) {
asset.setDefaults(desktopMediaCodes);
return;
}

// In case three are different, we will send mobile, desktop and tablet.
if (!desktopMediaCodes.equals(mobileMediaCodes) && !desktopMediaCodes.equals(tabletMediaCodes) && !mobileMediaCodes.equals(tabletMediaCodes)) {
asset.setDesktop(desktopMediaCodes);
asset.setMobile(mobileMediaCodes);
asset.setTablet(tabletMediaCodes);
return;
}

// In case only tablet is different, we will send default and tablet.
if (desktopMediaCodes.equals(mobileMediaCodes)) {
asset.setDefaults(desktopMediaCodes);
asset.setTablet(tabletMediaCodes);
return;
}

// In case only desktop is different, we will send default and tablet.
if (mobileMediaCodes.equals(tabletMediaCodes)) {
asset.setDefaults(mobileMediaCodes);
asset.setDesktop(desktopMediaCodes);
return;
}

// In case only mobile is different, we will send default and tablet.
asset.setDefaults(tabletMediaCodes);
asset.setMobile(mobileMediaCodes);

关于java - SonarQube 报告删除此表达式,其计算结果始终为 “true”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59882165/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com