编程语言
首页 > 编程语言> > java – Netbeans告诉我删除null比较,但这会破坏我的代码

java – Netbeans告诉我删除null比较,但这会破坏我的代码

作者:互联网

我有以下简单的代码来模拟猫狩猎:

import java.util.Arrays;
import java.util.LinkedList;

public class HuntigSaeson {
    int hunger = 4;
    int level = 3;
    LinkedList<String> cats = new LinkedList<String>(Arrays.asList(
        "1.Ginger",
        "3.Porkchops",
        "2.Muffin",
        "2.Max",
        "1.Carrot",
        "2.Puffy",
        "1.Fatty"
    ));

    void hunt() {
        Integer catLevel = null;
        do {
            if (catLevel != null)
              rest();
            catLevel = new Integer(findCat().split("\\.")[0]);
            huntCat(catLevel);
            if (hunger > 5) throw new RuntimeException("x_x");
        } while (hunger > 0);
        System.out.println("^_^");
    }

    void rest() { hunger += 1; }

    String findCat() {
        hunger += 1;
        String c = cats.pop();
        System.out.println("found " + c);
        return c;
    }

    private void huntCat(int catLevel) {
        hunger += 1;
        if (catLevel < level) {
            System.out.println("chomp chomp chomp");
            hunger -= 4;
        }
    }

    public static void main(String[] args) { new HuntigSaeson().hunt(); }
}

它产生这个输出:

found 1.Ginger
chomp chomp chomp
found 3.Porkchops
found 2.Muffin
chomp chomp chomp
found 2.Max
chomp chomp chomp
found 1.Carrot
chomp chomp chomp
found 2.Puffy
chomp chomp chomp
found 1.Fatty
chomp chomp chomp
^_^

空比较线的意图是我不想在寻找第一只猫之前休息. Netbeans强调了这条线,说我应该删除它.

所以我做了,通过改变

            if (catLevel != null)
              rest();

          rest();

但现在我死了:

found 1.Ginger
chomp chomp chomp
found 3.Porkchops
Exception in thread "main" java.lang.RuntimeException: x_x
    at HuntigSaeson.hunt(HuntigSaeson.java:24)
    at HuntigSaeson.main(HuntigSaeson.java:46)

为什么?我怎样才能解决这个问题?

解决方法:

当我删除空检查时,为什么我的应用程序会中断?

首先要注意的是:Netbeans警告是错误的.

通过删除rest()周围的空检查;您正在更改do while循环的第一次运行的流程.重要的是,您允许调用rest().这样做的最终结果是饥饿现在比你通常无法检查时的饥饿程度要大.

现在发生的是这样的:

>第一次循环迭代开始:饥饿= 4,等级= 3
> rest()被称为:饥饿增量为5.
>调用findCat():饥饿增量为6,返回“1.Ginger”.
> huntCat(1)被称为:饥饿增量为7.
> 1< 3(catLevel< level)评估为真,导致饥饿减少4(因此我们现在为3).
>饥饿不大于5,所以继续下一次迭代.
>第二次循环迭代开始:饥饿= 3,级别= 3
>调用rest(),饥饿增加到4.
>调用findCat(),饥饿增量为5,返回“3.Porkchops”.
> huntCat(3)被调用,饥饿增加到6
> 3< 3(catLevel< level)评估为假,饥饿不会减少.
>饥饿大于5,因此抛出RuntimeException(“x_x”).

我怎样才能解决这个问题?

好吧,鉴于Netbeans警告是错误的(因为catLevel在第一次迭代中肯定是空的),最简单的解决方案就是恢复空检查并忽略警告.

如果您愿意,可以通过单击左侧警告旁边的灯泡,浏览菜单并选择“禁用警告”来禁用警告.虽然从长远来看,如果从而导致质量更好的代码,我本人宁愿忍受一个加重黄色下划线.

或者,将等级提高到4,或将饥饿感降低到3,或者更改你的if语句以检查饥饿是否>相反,6.

标签:java,netbeans,static-analysis
来源: https://codeday.me/bug/20190629/1322368.html