【问题标题】:Loop over the first 20 elements of an array in Java在 Java 中循环遍历数组的前 20 个元素
【发布时间】:2013-01-19 17:36:26
【问题描述】:

我这里有这个循环

 for(int i =0; i < prices.length; i++)
  {
        if(prices[i]>largest)
        {
            largest = prices[i];
        }

        else if(prices[i]<smallest)
        {
            smallest= prices[i];
        }
  }

遍历整个数组并找到最小值和最大值。假设我只想遍历前 20 个元素,我该怎么做?我已经尝试在这个 for 循环下放置一个嵌套循环,看看我是否遇到它,但我不能。

【问题讨论】:

  • 将条件改为i &lt; prices.length &amp;&amp; i &lt; 20
  • 无意冒犯,但最好先阅读有关语言基础的文献?
  • 大多数介绍教科书都没有表明您可以在循环子句中放置任何布尔表达式。友善并帮助 OP 出来

标签: java arrays loops


【解决方案1】:

您可以将要求添加到循环控制条件:

for(int i =0; i < prices.length && i < 20; i++)

这将检查数组中超过 20 个的前 20 个元素,如果少于 20 个则检查整个数组。

【讨论】:

  • 谢谢!我遇到的问题,我虽然是关于 user2033853 ,但没有循环通过那个数组!感谢您的热心帮助!
【解决方案2】:
for(int i =0; i < 20 && i < prices.length; i++)

这将循环 20 次,即数组的前 20 个元素。

【讨论】:

  • 如果prices中的元素少于20个怎么办?
  • @nkr 我编辑了答案以检查数组的长度。
【解决方案3】:

5 个答案,它们都在循环中进行双重比较?

难怪,Java 程序运行如此缓慢...

做这样一个循环的正确方法是:

 for(int i = 0, len = Math.min(prices.length, 20); i < len; i++)

将 length 和 20 之间的比较移出循环并评估循环条件,因此速度是原来的两倍。 (忽略 JIT 可能会或可能不会做的事情)

另外,你必须用第一个元素初始化最大/最小元素(或者你得到无效值,如果由于 else 而数组中只有一个元素),然后你可以跳过循环中的第一个元素,让它变得“更快”:

 largest = prices[0];
 smallest = prices[0];
 for(int i = 1, len = Math.min(prices.length, 20); i < len; i++)

【讨论】:

  • 你在发布你的答案之前看到我的答案了吗?我做了你所做的。
  • @foampile: 是的,但是你也在循环中调用 Min,而不是在循环之前调用
  • 我认为 java 优化器会处理冗余评估
  • 在这里,我不是 100% 确定,所以我问了这个问题:stackoverflow.com/questions/14711125/…
  • 不仅编译器可能会提升常量,而且由提出这个问题的新手编写的任何程序都可能比这具有更大的效率低下。鼓励他们考虑如此微小的微优化对他们毫无帮助。
【解决方案4】:

prices.length替换为Math.min(20, prices.length),这是数组的长度或20,以较小者为准:

for(int i =0; i &lt; Math.min(20, prices.length); i++)

【讨论】:

    【解决方案5】:

    将你的 for 循环改成这样:

    for(int i =0; i < (prices.length < 20 ? prices.length : 20); i++)
    {
        if(prices[i]>largest)
        {
            largest = prices[i];
        }
        else if(prices[i]<smallest)
        {
            smallest= prices[i];
        }
    }
    

    【讨论】:

      【解决方案6】:

      如果你只想循环遍历前 20 个元素,那么在 for 循环的标题中这样说,像这样。

      for(int i =0; i < prices.length && i < 20; i++)
      

      【讨论】:

      • @AndrewCooper 我前段时间编辑了它,请确保在投反对票之前重新加载问题。
      【解决方案7】:

      最大值是正确的得到最小值很简单make max = min 然后像 那么

      if(min>x[i])
        min=x[i];
      

      【讨论】:

      • 为什么随机回答3年前的问题?
      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2016-05-25
      • 2021-07-08
      • 1970-01-01
      相关资源
      最近更新 更多