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

use*_*464 7 java arrays loops

我在这里有这个循环

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

        else if(prices[i]<smallest)
        {
            smallest= prices[i];
        }
  }
Run Code Online (Sandbox Code Playgroud)

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

And*_*per 22

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

for(int i =0; i < prices.length && i < 20; i++)
Run Code Online (Sandbox Code Playgroud)

这将检查数组中20个元素的前20个元素,但是如果少于20个项目则检查整个数组.


小智 6

for(int i =0; i < 20 && i < prices.length; i++)
Run Code Online (Sandbox Code Playgroud)

这将循环20次,即阵列的前20个元素.


Ben*_*ela 6

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

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

执行此类循环的正确方法是:

 for(int i = 0, len = Math.min(prices.length, 20); i < len; i++)
Run Code Online (Sandbox Code Playgroud)

将长度和20之间的比较移出循环并评估循环条件因此快两倍.(忽略JIT可能会或可能不会做什么)

此外,您必须使用第一个元素初始化最大/最小(或者如果由于else而在数组中只有一个元素,则获得无效值),然后您可以跳过循环中的第一个元素,使其均匀"快点":

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


amp*_*ent 5

替换prices.lengthMath.min(20, prices.length),即数组的长度或20,取较小者:

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