2013-02-04 28 views
7

Tôi có vòng lặp này đâyVòng trong vòng 20 yếu tố đầu tiên của một mảng trong Java

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

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

mà vòng qua toàn bộ mảng và tìm giá trị min và max. Nói rằng tôi muốn chỉ lặp qua 20 yếu tố đầu tiên làm cách nào để làm điều đó? Tôi đã cố gắng dọc theo dòng đặt một vòng lặp lồng nhau trong vòng này cho vòng lặp và nhìn thấy nếu tôi đi qua nó, nhưng tôi không thể.

+10

Thay đổi điều kiện thành 'i

+13

Không có hành vi phạm tội, nhưng có thể tốt hơn là đọc văn học đầu tiên về các khái niệm cơ bản của ngôn ngữ? – Andrey

+3

hầu hết các sách giáo khoa giới thiệu không cho thấy bạn có thể đặt bất kỳ biểu thức boolean nào trong mệnh đề vòng lặp. được tốt đẹp và giúp OP ra –

Trả lời

22

Bạn chỉ có thể thêm các yêu cầu về điều kiện điều khiển vòng lặp:

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

này sẽ kiểm tra 20 yếu tố đầu tiên mà ther hơn 20 trong mảng, nhưng toàn bộ mảng nếu có ít hơn 20 mặt hàng.

+0

Cảm ơn bạn! Vấn đề tôi đã có, tôi mặc dù về user2033853 nhưng mà didnt vòng lặp thông qua mảng đó! Cảm ơn lòng giúp đỡ tốt bụng của bạn! – user1816464

3

Nếu bạn chỉ muốn lặp qua 20 phần tử đầu tiên, sau đó nói như vậy trong tiêu đề của vòng lặp for, như thế này.

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

@AndrewCooper Tôi đã chỉnh sửa nó một lúc trước, hãy chắc chắn bạn tải lại câu hỏi trước khi bạn downvote. – Michael

+1

Nhận xét và ghi chú bị xóa –

4

Thay đổi của bạn cho vòng lặp để một cái gì đó như thế này:

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

Điều này sẽ lặp qua 20 lần, nghĩa là hai mươi yếu tố đầu tiên của mảng.

+0

Và khi nào có ít hơn 20 yếu tố trong 'giá'? – nkr

+0

@nkr Tôi đã chỉnh sửa câu trả lời để kiểm tra độ dài của mảng. – user2033853

5

Thay prices.length với Math.min(20, prices.length), đó là chiều dài của mảng hoặc 20, tùy theo cái nào nhỏ hơn:

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

6

5 câu trả lời và tất cả họ đều có một sự so sánh đôi trong vòng lặp?

Không ngạc nhiên, các chương trình Java chạy rất chậm ...

Cách đúng để làm một vòng lặp như vậy là:

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

di chuyển so sánh giữa chiều dài và 20 ra khỏi vòng lặp và đánh giá điều kiện vòng lặp nhanh gấp hai lần. (bỏ qua những gì JIT có thể hoặc không thể làm)

Ngoài ra, bạn phải khởi tạo lớn nhất/nhỏ nhất với phần tử đầu tiên (hoặc bạn nhận được giá trị không hợp lệ, nếu chỉ có một phần tử trong mảng do khác) , và sau đó bạn có thể bỏ qua các yếu tố đầu tiên trong vòng lặp, làm cho nó thậm chí "nhanh hơn":

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

bạn có thấy câu trả lời của tôi trước khi đăng bài của bạn không? tôi đã làm chính xác những gì bạn đã làm. – amphibient

+0

@foampile: Có, nhưng bạn cũng gọi Min trong vòng lặp, thay vì trước vòng lặp – BeniBela

+1

tôi nghĩ trình tối ưu hóa java sẽ xử lý các đánh giá dư thừa – amphibient

-1

giá trị tối đa là đúng để có được tối thiểu là đơn giản làm max = min sau đó làm việc như sau đó

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

Tại sao trả lời một câu hỏi ngẫu nhiên từ 3 năm trước? –

Các vấn đề liên quan