ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-06-29 03:51:04  阅读:212  来源: 互联网

标签:java netbeans static-analysis


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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有