2013-02-04 23 views
7

bir dizide ilk 20 elemanları üzerinde bir minimum ve maksimum değer tüm dizi döngüsü ve bulur buradaDöngü Java

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

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

bu döngü vardır. Sadece ilk 20 elementten geçmek istediğimi söyle, bunu nasıl yaparım? Bu döngüde iç içe bir döngü koymak ve bununla karşılaşıp karşılaşmadığımı görmek için uğraştım ama yapamam.

+10

Durumu "i

+13

Suç yok, ama dilin temelleri hakkında ilk önce literatür okumak daha iyi olabilir mi? – Andrey

+3

Çoğu giriş ders kitabı, döngü maddesine herhangi bir boole ifadesi koyabildiğini göstermez. güzel ol ve yardım et –

cevap

22

:

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

varsa Bu orada dizide 20'den fazla olan ilk 20 elemanları, ama bütün dizi kontrol ediyorum 20'den az ürün.

+0

Teşekkür ederiz! Ben yaşadım sorun, ben user2033853 hakkında ama bu dizi ile döngü yoktu! Nazik yardımın için teşekkür ederim! – user1816464

3

Yalnızca ilk 20 öğe arasında geçiş yapmak istiyorsanız, bunun gibi, for döngüsünün başlığında bunu söyleyin.

for(int i =0; i < prices.length && i < 20; i++) 
Sadece döngü kontrolü durumuna gereksinimi ekleyebilir
+0

@AndrewCooper Bir süre önce düzenledim, reddetmeden önce soruyu yeniden yüklediğinizden emin olun. – Michael

+1

Yorum Yap ve İndirilenler Kaldırıldı –

4
böyle bir şey için bir döngü için değiştirin

:

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++) 

Bu şekilde döngü 20 ile kat, dizinin yani ilk yirmi unsurları.

+0

Ve 'fiyatlar'da 20'den az eleman olduğunda ne olacak? – nkr

+0

@nkr Ayrıca dizinin uzunluğunu kontrol etmek için cevabı düzenledim. – user2033853

5

hangisi daha küçükse dizi veya 20 uzunluğu Math.min(20, prices.length) ile prices.length, Değiştir:

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

6

5 cevaplar ve hepsi döngüde bir çift karşılaştırma var mı?

şaşmamak Java programları yüzden yavaş çalışmasına ...

böyle bir döngü yapmak için en doğru yoludur:

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

döngünün dışında uzunluğu ve 20 arasında karşılaştırma hareketli ve değerlendirilmesi döngü durumu bu nedenle iki kat daha hızlıdır. (JIT'in yapamayacağı veya yapamayacağı dikkate alınmaz)

Ayrıca, en büyük/en küçük olanı ilk öğe ile başlatmanız gerekir (aksi halde dizide yalnızca bir öğe varsa geçersiz değerler alırsınız) ve sonra yapım döngüde ilk öğesini atlayabilirsiniz hatta "hızlı":

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

Cevabınızı göndermeden önce cevabımı gördün mü? Tam olarak ne yaptığını yaptım. – amphibient

+0

@foampile: Evet, ama aynı zamanda döngüde – BeniBela

+1

döngüsünden önce de Min'i çağıracağım, java optimizasyonunun – amphibient

-1

maksimum değer, minimum basit makyaj max = min sonra sonra

if(min>x[i]) 
    min=x[i]; 
gibi çalışması olduğunu almak için doğrudur
+1

Neden 3 yıl önce bir soruya rastgele cevap veriyorsunuz? –