在Java中循环遍历数组的前20个元素

7
我有一个循环在这里。
 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循环下嵌套一个循环,并查看是否有解决方法,但是没有成功。


10
将条件更改为 i < prices.length && i < 20 - Peter Lawrey
13
不冒犯,但也许先阅读有关该语言基础的文献会更好? - Andrey
3
大多数入门教材没有展示你可以将任何布尔表达式放在循环语句中。友善一点,帮助提问者完成翻译。 - Robert Levy
7个回答

22

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

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

如果数组中的元素超过20个,则只检查前20个元素;如果数组中的元素不到20个,则检查整个数组。


谢谢!我遇到的问题,我想到了user2033853,但它没有循环遍历那个数组!感谢您的帮助! - user1816464

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

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

prices中的元素少于20个时,该怎么办? - nkr
@nkr,我编辑了答案以检查数组的长度。 - user2033853

6

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

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

这样做循环的正确方式是:

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

将长度与20的比较移出循环并评估循环条件,因此速度提高了一倍。(忽略JIT可能正在执行的操作)
另外,您必须使用第一个元素初始化largest/smallest(否则如果数组中只有一个元素,则会得到无效值),然后您可以在循环中跳过第一个元素,使它变得更加“快速”。
 largest = prices[0];
 smallest = prices[0];
 for(int i = 1, len = Math.min(prices.length, 20); i < len; i++)

1
你在发帖之前看到我回答了吗?我也做了和你一样的事情。 - amphibient
@foampile:是的,但你也在循环中调用了Min,而不是在循环之前。 - BeniBela
1
我认为Java优化器会处理冗余的计算。 - amphibient
在这里,我不是100%确定,所以我问了这个问题:https://dev59.com/v27Xa4cB1Zd3GeqPlxj1 - amphibient
1
编译器不仅可能会提升常量,而且任何由提出这个问题的初学者编写的程序都很可能比这更低效。鼓励他们考虑如此微小的微优化并不能帮助他们。 - poolie

5

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

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


4
将您的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];
    }
}

3
如果您只想循环前20个元素,则可以在for循环的头部说明,像这样。
for(int i =0; i < prices.length && i < 20; i++)

@AndrewCooper 我之前编辑过它,请确保在你给它投反对票之前重新加载问题。 - Michael

-1

最大值正确获取最小值很简单,只需将max=min,然后按以下方式操作:

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

1
为什么要随机回答三年前的问题? - user5416120

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接