从阵列中找到最小值 - 我不明白

时间:2016-09-26 18:52:34

标签: java arrays algorithm minimum

所以我知道下面的代码有效,但由于我对编码很新,所以我不明白为什么以及如何运作。如果有人能向我解释,那将有助于我理解编程。

代码如下:

 public static double minValue(double[] times){  
        double minValue = times[0];  

        for(int i = 1; i < times.length; i++){  
            if (times[i] < minValue){  
                minValue = times[i];  
            }  
        }  
        minValue = minValue / 60;
        return minValue;  
    }

我在此不明白的是:double minValue = times[0];为什么这个值为0?它也适用于其他数字,低于数组的长度。使用空格或大于数组长度的数字会返回错误,但必须有代码明确使用0的原因。

然后这个:

for(int i = 1; i < times.length; i++){  
    if (times[i] < minValue) {  
         minValue = times[i];  
    }
}

究竟是如何确定最小值?

5 个答案:

答案 0 :(得分:5)

您必须将一些初始值设置为minValue

一种惯例是将其初始化为大于数组中所有数字的值(例如Double.MAX_VALUE)。

然后循环必须遍历数组的所有元素:

for(int i = 0; i < times.length; i++)

另一个惯例是将其初始化为数组的一个值(任何一个都可以)。通常选择数组的第一个元素,这允许循环从数组的第二个元素迭代:

for(int i = 1; i < times.length; i++)

答案 1 :(得分:2)

这里有几件事情:

为什么从时间开始[0] /为什么这个值为0 ???

主要原因是java中的数组基于零。这个术语用于表示为了访问数组中的第一个元素,您需要访问第零个数组元素。

同时,这也是您无法访问数组中 nth 项的原因(因此,如果时间有四个元素,那么第四个元素只能由{{}访问1}}而不是times[3]

有一个very interesting discussion by E.W Dijkstra关于这个'应该'的原因

问题中的编程示例

所以编程示例基本上是,给定一个数组/十进制数列表,找到该列表中的最小值

如果你把编程语言从这个等式中拿出来并解决了问题; 解决此问题的方法之一可能如下:

  • 以默认值开头为最小值,此处我们假设数组/列表中的第一个数字是最小值。
  • 现在我们查看数组/数字列表,并问自己数组/列表中的下一个数字是否小于当前最小值。如果它低于我们当前的最低值,则此数字将成为新的最小值
  • 所以我们这样做,直到没有更多的数字要检查。
  • 在此过程结束时,我们说的数字最小值就是我们的结果。

将此信息与代码绑定

因此,在了解了我们将如何解决这个问题后,让我们尝试使用一些Java代码:

  

以默认值作为最小值

开始

times[4]

  

浏览我们列表的其余部分

double minValue = times[0];
  

询问自己列表中的下一个数字是否小于最小值

for(int i = 1; i < times.length; i++){ 
  

如果是,那么这是我们新的最低要求

    if (times[i] < minValue){
  

使用整个数据列表/数组执行此过程后,您将获得实际最小值

        minValue = times[i];  
    }  
}  

一旦你明白了,那么你基本上可以理解为什么你的代码以它的工作方式工作(我也使用你自己的代码:))

对我而言,最重要的内容应该是您在尝试使用编程语言之前需要了解如何解决问题。编程语言只是用来表达你所拥有的解决方案。

快乐编码:)

答案 2 :(得分:1)

与许多其他编程语言一样,java数组从零开始编制索引。 [0]末尾的double minValue = times[0];minValue变量初始化为数组的第一个元素。随后的for循环从数组的 second 元素开始,即i = 1。然后它继续检查数组的每个值,直到结束,看它是否小于此时遇到的最小值。

顺便说一句,在数组的第一个元素是最小值的情况下,您所做的以下陈述是错误的:

  

它也适用于其他数字,低于数组的长度。

答案 3 :(得分:0)

[0]表示times数组中的第一个值。

首先,minValue设置为数组中的第一个值。 然后,循环遍历数组中的所有值(第一个除外)并检查其中是否有任何值小于当前值minValue(先前找到的最小值)。

每次数组中的值小于当前值minValue时,

minValue都会重新初始化。

答案 4 :(得分:0)

您需要minValue变量来保持当前最少的数字。在开始时,您将其设置为第一个元素,因为我们必须以某种方式初始化它。在我们开始循环之后,将每个数字与它进行比较。当checked元素小于minValue时 - 我们更改其值。当我们完成迭代时 - 我们知道我们的变量存储了最小值。