2013-02-04 209 views
7

陣列的第一20個元素我這裏遍歷在Java中

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

+13

沒有冒犯,但可能是首先閱讀關於語言基礎知識的文獻更好? – Andrey

+3

大多數介紹教科書並未顯示您可以在循環子句中放置任何布爾表達式。很好,並幫助OP出 –

回答

22

只需要添加的要求,以循環控制條件:

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

這將檢查前20個元素,其中療法均超過20陣列中,但整個數組,如果有少於20件。

+0

謝謝!我遇到的問題,我雖然關於user2033853,但沒有通過該數組循環!感謝您的熱心幫助! – user1816464

3

如果您只想循環前20個元素,請在for循環的標題中這樣說。

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

@AndrewCooper我編輯了一段時間之前,請確保您重新加載問題之前,你downvote。 – Michael

+1

評論和downvote已刪除 –

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]; 
    } 
} 
6
for(int i =0; i < 20 && i < prices.length; i++) 

這將遍歷20倍,即數組的第20個元件。

+0

當「價格」中的元素少於20時呢? – nkr

+0

@nkr我編輯的答案來檢查陣列的長度爲好。 – user2033853

5

替換prices.lengthMath.min(20, prices.length),這是陣列或20的長度中較小的一個:

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

6

5答案,他們都有在循環的雙重比較?

難怪,Java程序的運行,所以慢慢地......

做這樣一個循環的正確方法是:

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

移動的長度和20之間的比較圈外和評估因此環路條件快兩倍。 (忽略JIT可能做什麼或可能不做什麼)

此外,您必須使用第一個元素初始化最大/最小值(或者如果數組中只有一個元素由於其他原因而得到無效值) ,然後你可以跳過第一個元素的循環,使其更「快」:

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

你看到我的回答你發佈之前?我做了你所做的。 – amphibient

+0

@foampile:是的,但你也叫敏的循環,循環 – BeniBela

+1

我認爲Java的優化將多餘的評價 – amphibient

-1

最大值是正確的得到最低的簡單化妝最大=分鐘 然後像 然後

if(min>x[i]) 
    min=x[i]; 
工作
+1

爲什麼隨機抽取3年前回答的問題? – 2016-01-16 22:33:43