当前位置: 首页 > 知识库问答 >
问题:

我的else语句中的代码已经死了,我不相信这是真的(java)?

芮明知
2023-03-14

我在java代码中使用有组织的BST。这个函数/方法应该搜索树中具有特定值的节点,并让用户知道它是否存在。

    void search(int item, Node root, int r, int c) {

        //if the integer is found
        if(root.val == item) {
            System.out.println("integer located at row: " + r + " & child: " + c + "\n");
        }

        //if the integer is not found (use the closest value to find it)
        else if(root != null) {
            if(item < root.val) 
                search(item, root.left, r + 1, (c * 2) - 1);
            else
                search(item, root.right, r + 1, c * 2);
        }

        //if the root is a null (it doesn't exist or cannot be found)
        else {
            System.out.println("integer cannot be located\n");
        }
    }

问题在于结尾的else语句。我的编译器说,else语句中的任何内容都是死代码,这意味着它没有被使用。但是,如果函数确实遇到null并且无法找到具有指定值的节点,我需要else语句中的代码。如果我将第二条else语句更改为else if(root.val!=item),它就会消失


共有2个答案

符鸿光
2023-03-14
匿名用户

你的第一个if表达式:

if (root.val == item)

如果根为null,则会抛出NullPointerExctive,如果不是,则执行比较。因此,最终的其他块永远无法执行。

您可以尝试重新排序代码:

void search(int item, Node root, int r, int c) {
    if (root != null) {
       if (root.val == item) {
           System.out.println("integer located at row: " + r + " & child: " + c + "\n");
       } else if (item < root.val) {
            search(item, root.left, r + 1, (c * 2) - 1);
       } else {
            search(item, root.right, r + 1, c * 2);
       }
    } else {
       System.out.println("integer cannot be located\n");
    }
 }

庞乐池
2023-03-14

这是死代码,因为根中的的解引用。val要求根目录为非空。如果它是null,你会得到NullPointerException

在我的IDE中,这是一个警告;代码在语法上是正确的,但在语义上,将永远不会输入最后的else

要解决这个问题,首先检查if语句中的null

void search(int item, Node root, int r, int c) {
    if (root == null) {
        // if the root is a null (it doesn't exist or cannot be found)

        System.out.println("integer cannot be located\n");
    } else if (root.val == item) {
        // if the integer is found

        System.out.println("integer located at row: " + r + " & child: " + c + "\n");
    } else if (item < root.val) {
        // if the integer is not found (use the closest value to the left to find it)

        search(item, root.left, r + 1, (c * 2) - 1);
    } else {
        // if the integer is not found (use the closest value to the right find it)

        search(item, root.right, r + 1, c * 2);
    }
}

请注意,您可以通过直接返回或停止方法执行的方式更改前两个ifs。然后检查

 类似资料:
  • 问题内容: 我正在为计费程序项目编写条件语句。对于我认识的初学者来说有点先进,但是我欢迎挑战。无论如何,我计划通过询问用户名和密码来启动程序。因此,这是我对该程序的第一个编码。 现在,当我运行此代码时,如果我键入了用户名的三个选项之外的其他选项,Python会打印出“无效的用户名”行。现在由于某种原因,它会打印出“有效的用户名”,然后继续输入密码提示。另外,如果我输入了除密码选项以外的任何内容,它

  • 我遇到的问题是“是/否”语句,如果我输入“否”,它将继续退出程序。请告诉我问题出在哪里? 导入java。util。随机的导入java。util。扫描仪; 公共类NumberGame{private static final int DO_NOT_PLAY_reach=0; }

  • 首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的

  • 这个代码基本上是将一个数字作为字符串,我的目标是获取字符串的每个索引并将其值传输到整数数组的索引,以便我的数字在整数数组中,并且数组的每个索引表示数字的一个数字

  • 我很困惑,为什么这段代码在我包含一条返回语句的情况下却没有返回语句。任何帮助都将不胜感激! 问题代码:

  • 我想在我们当前的android studio项目中添加一个if/else语句,因为我正在为我们的论文做一个聊天机器人。但我不知道怎么做,也不知道有没有可能。所以我们项目的流程是,如果我在chatbot上键入某个关键字,比如“schedule/schedule”,它就会显示我学校的时间表,或者学校什么时间、什么日期开学的时间表。 activity_main.xml: mainactivity.jav