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

2024-03-30

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

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();

to

          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)

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


为什么当我删除应用程序时我的应用程序会崩溃null check?

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

通过删除null检查一下rest(); you are改变你的第一次运行的流程do while环形。重要的是,您允许rest()被称为。这样做的最终效果是hunger现在比你离开时通常要大null检查到位。

现在发生的事情是这样的:

  • 第一个循环迭代开始: hunger = 4, level = 3
  • rest()叫做:hunger增加到5.
  • findCat()叫做:hunger增加到6, "1.Ginger"被返回。
  • huntCat(1)叫做:hunger增加到7.
  • 1 < 3 (catLevel < level) 评估为true,导致hunger递减4(所以我们现在处于3).
  • hunger不大于5,因此继续下一次迭代。
  • 第二次循环迭代开始: hunger = 3, level = 3
  • rest()叫做,hunger增加到4.
  • findCat()叫做,hunger增加到5, "3.Porkchops"被返回。
  • huntCat(3)叫做,hunger增加到6
  • 3 < 3 (catLevel < level) 评估为false, hunger不会减少.
  • hunger大于5, so RuntimeException("x_x")被抛出。

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

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

如果你希望,您可以通过单击左侧警告旁边的灯泡、浏览菜单并选择“禁用警告”来禁用警告。但就我个人而言,如果从长远来看它能带来更好的代码质量,我宁愿忍受一个令人恼火的黄色下划线。

或者,增加level to 4,或减少hunger to 3,或者改变你的if语句来检查是否hunger > 6反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Netbeans 告诉我删除 null 比较,但这会破坏我的代码 的相关文章

随机推荐

  • 通配符子域不适用于实时服务器上的静态子域

    我通过创建子域将项目部署在实时服务器上app example net在c面板上 并将我的项目放入app example net文件夹 在我的项目中 我有两个路线组 如下所示 路线 php
  • 如何将 SQL Server 错误日志文件移动到新位置?

    我的 C 盘上的默认 SQL Server 日志目录已满 如何移动SQL Server错误日志默认目录 Use the SQL Configuration Manager 以下是更改启动以使用不同目录的步骤 完成后重新启动服务器
  • 如何使用 html 和 css 创建一个小颜色框?

    我在 html 文件 网站上有一张图片 我想添加该图片的可用颜色列表 我想创建非常小的盒子或点 一个适合每种颜色的小盒子 我怎样才能做到这一点 Thanks 对于旧的浏览器 您经常会使用float https developer mozil
  • 适用于所有模板的 Django Python base.html

    在我的根目录中 我有一个模板 在该模板内后面跟着一个base html这将是我的自定义管理网站的主要布局 In my templates admin base html我有这个代码 block content endblock 我要这个ba
  • 如何在 http 响应正文中返回编码字符串?

    将编码字符串添加到 http 响应似乎会用 F MISSING 替换某些字符 如何防止这种情况发生 Output encodedText M6c8RqL61nMFy F 缺失 hQmciSYrh9ZXgVFVjO Code package
  • 在方法调用中传递“this”是java中可接受的做法

    在方法调用中传递当前对象是好 坏 可接受的做法 如 public class Bar public Bar public void foo Baz baz modify some values of baz public class Baz
  • 如何使用 CLI 在 Windows 操作系统中将 Node.js 6.x 更新到 8.x

    我无法在 Node js 6 x 上运行 Angular 6 CLI 它显示错误 升级最低 Node js 8 xx 以使用 Angular CLI 我尝试使用以下代码 npm install g npm windows upgrade n
  • Java 编译器:停止抱怨死代码

    出于测试目的 我经常开始在现有项目中输入一些代码 因此 我想要测试的代码位于所有其他代码之前 如下所示 public static void main String args char a System out println int a
  • C++ 变量定义中的“class”关键字

    在有人问之前 是的 这是家庭作业的一部分 是的 在问之前我做了很多谷歌搜索 我花了最后一个小时在谷歌上用很多很多不同的关键词进行了集中搜索 但就是找不到任何东西 那么问题来了 下面的变量定义是什么意思 class MyClass myCla
  • 为什么错误回溯显示编辑后的脚本而不是实际运行的脚本?

    背景 考虑以下最小示例 当我保存以下脚本并从终端运行它时 import time time sleep 5 raise Exception 该代码将在休眠五秒后引发错误 并留下以下回溯 回溯 最近一次调用最后一次 文件 test minim
  • 动态 REST API 调用

    我已经成功访问 页面上的静态API数据 我现在正在尝试访问 dynam API 我已经阅读了一些访问动态API的文档 但是API提供商的文档与在线资源不同 我不确定必须在现有代码中进行哪些更改才能访问动态 API 数据 这是来自 API 提
  • 初始化时0.0f的意义是什么(在C语言中)?

    我见过人们初始化浮点变量的代码 如下所示 float num 0 0f 这与仅执行以下操作之间有显着差异吗 float num 0 谢谢 浮动 x 0具有从 int 到 float 的隐式类型转换 浮点数 x 0 0f没有这样的类型转换 浮
  • Swift:从元组数组中获取元素数组

    我有一个像这样的元组数组 var answers number Int good Bool 我想从中获取一个数字成员数组 就像我做了类似的事情 answers number gt Should give Int of all values
  • -fPIC 标志可以增加多少开销?

    Question 我正在测试一个计算曼德尔布罗分形的简单代码 我一直在根据检查点是否属于曼德尔布罗特集的函数中的迭代次数来检查其性能 令人惊讶的是 添加后我的时间出现了很大的差异 fPIC旗帜 据我了解 开销通常可以忽略不计 我遇到的最高开
  • C++ 中最大的整数数据类型?

    C 中最大的整数数据类型是什么 最大的standardC 整数类型是long C has a long long C 0x 也会添加它 当然您可以实现自己的自定义整数类型 甚至可能是 BigInt 类 但从技术上来说 考虑到内置的整数类型
  • 行程解压

    这里是CS学生 我想编写一个程序来解压缩根据游程编码的修改形式进行编码的字符串 我已经为其编写了代码 例如 如果字符串包含 bba10 它将解压缩为 bbaaaaaaaaaa 如何让程序识别字符串的一部分 10 是整数 谢谢阅读 一个简单的
  • 为什么即使在哈希上调用 Enumerable#find/#detect 也会返回数组?

    The 的文档Enumerable find detect http ruby doc org core 2 0 Enumerable html method i find says find ifnone nil obj block ob
  • 使用未分配的变量?

    当声明 paymentstatus 为空或在 if 语句中具有值时 我收到错误使用未分配的变量 ps 我想我已经声明了 ps 但显然我做错了什么 为什么编译器会抱怨这个 这是上下文中的错误 public IList
  • 如何求最大生成树?

    与克鲁斯卡尔最小生成树算法相反的算法是否适用 我的意思是 每一步选择最大权重 边缘 还有其他找到最大生成树的想法吗 是的 它确实 计算网络 G 的最大权生成树的一种方法 由于克鲁斯卡尔 可以总结如下 按权重将 G 的边按降序排序 令 T 为
  • Netbeans 告诉我删除 null 比较,但这会破坏我的代码

    我有以下简单的代码来模拟猫狩猎 import java util Arrays import java util LinkedList public class HuntigSaeson int hunger 4 int level 3 L