【问题标题】:Finding minimum value using nodes and null使用节点和空值查找最小值
【发布时间】:2023-03-30 09:23:01
【问题描述】:

只是想知道我应该如何解释这段代码?最让我失望的是 minOfTail = next.minVal() 部分,当我们将 thisNumber 与 minOfTail 进行比较时,该变量的确切值是多少minOfTail?

    public ListOfNVersion03PartB(int num)
    {
        thisNumber = num;
        next = null;

        ++nodeCount;
        nodeID = nodeCount;

    }
 public int minVal()
    {
        int minOfTail;

        if ( next == null )
            return thisNumber;

        minOfTail = next.minVal();

        if ( thisNumber <= minOfTail )
            return thisNumber; 
        else
            return minOfTail;

    } // method minVal

【问题讨论】:

    标签: java minimum


    【解决方案1】:

    只是想知道我应该如何解释这段代码?

    这个问题太宽泛,无法回答。

    最让我失望的是 minOfTail = next.minVal() 部分

    这个可以回答。

    所以,整个minVal()函数可以改写如下:

    public int minVal()
    {
        if ( next == null )
            return thisNumber;
        return Math.min( thisNumber, next.minVal() );
    }
    

    甚至像这样:

    public int minVal()
    {
        return next == null?  thisNumber : Math.min( thisNumber, next.minVal() );
    }
    

    所以,next.minVal() 将简单地调用next 节点来计算自己的最小值,下一个节点将委托给自己的下一个节点,以此类推,直到没有下一个节点。

    还请注意:

        int minOfTail;
    
        ... unrelated code here...
    
        minOfTail = next.minVal();
    

    是古老的 C 风格(C 编译器开始受到 C++ 影响之前的 C 风格)在 Java 中根本不常见,在任何语言中这样做都不明智,而且在现代普遍不受欢迎。

    【讨论】:

    • 干杯兄弟,我只是在做一些 uni 工作,我是一个完整的初学者,所以这非常有帮助:-)
    【解决方案2】:

    函数递归计算对象链表中thisNumber 的最小值。函数minVal() 计算从当前对象开始的列表尾部中的最小值。

    如果当前对象的next 字段是null,那么尾部就是那个对象,并且从当前对象开始的尾部的最小值就是thisNumber

    如果next field is notnull`那么从当前对象开始的尾部最小值是最小值

    • 当前值的thisNumber值和
    • 从下一个对象开始的尾部的最小值。

    函数首先找到从下一个对象开始的尾部的最小值并将该值分配给minOfTail。然后返回当前对象的minOfTailthisNumber的最小值。

    【讨论】:

    • 您好,如果我遗漏了一些东西,请您澄清一下,但您能否澄清一下我对此的解释是否正确java minOfTail = next.minVal(); if ( thisNumber &lt;= minOfTail ) minOfTail 一直在搜索下一个对象的值,而 thisNumber 有点像占位符?感谢您在上面的解释,我确实理解了很多。
    • 不,我不认为这是正确的。 thisNumber 不是占位符。它是存储在调用minValue() 方法的对象中的值。 minOfTail 设置为后面的对象(在列表中)的最小值。你在这里看到的基本上是这个循环:result = Integer.MAX_VALUE; while (object != null) { result = Math.min(result, object.thisNumber); object = object.next; }。循环不是显式编写的,而是作为递归函数编写的。您可能想在一些编程手册中查找递归和循环。
    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 2012-09-16
    • 2018-09-21
    • 2017-04-20
    • 2021-01-24
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    相关资源
    最近更新 更多