2016-12-04 17 views
6

Tôi đang cố gắng đếm chuỗi dài nhất của các phần tử tăng liên tiếp trong một mảng được tạo ngẫu nhiên, MOODS. Mã này luôn trả về một giá trị nhỏ hơn những gì là chính xác.Đếm tăng các phần tử trong một mảng

int maxDays = 0; 
    int days = 0; 
    for (int i = 0; i < MOODS.size() - 1; i++) { 
     if (MOODS.get(i + 1) > MOODS.get(i)) { 
      days += 1; 
     if(days>maxDays){ 
      maxDays=days; 
     } 
     } else { 
      days = 0; 
     } 

    } 
    return maxDays; 
} 
+2

Tôi nghĩ rằng bạn bỏ qua thực tế là khi MOODS.get (i + 1)> MOODS.get (i) lần đầu tiên, khi ngày = 0, chuỗi chuỗi ngày càng tăng có chiều dài là hai . Sửa lỗi đó và nó sẽ hoạt động. –

+0

Oh người đàn ông, tôi đã dành quá lâu đập đầu của tôi chống lại lỗi đó ... Cảm ơn bạn rất nhiều. – olwatshisface

+0

Bạn được chào đón :). Mã trong câu trả lời sẽ giải quyết vấn đề và xử lý trường hợp đặc biệt của MOODS.size() = 0. –

Trả lời

5

Bạn sẽ luôn có ít nhất một chuỗi chuỗi ngày càng tăng với độ dài 1. Chỉ cần thay đổi ngày thành 1 và nó sẽ hoạt động.

int maxDays = Math.min(1, MOODS.size()); 
int days = 1; 
for (int i = 0; i < MOODS.size() - 1; i++) { 
    if (MOODS.get(i + 1) > MOODS.get(i)) { 
     days += 1; 
     if (days>maxDays){ 
      maxDays=days; 
     } 
    } else { 
     days = 1; 
    } 
} 
return maxDays; 
+1

Có một vấn đề khác. Điều gì xảy ra khi 'MOODS.size()' chỉ là '1'? hoặc '0'? – 4castle

+0

Có, nó sẽ không vào vòng lặp for. Đặt maxDays thành 1 sẽ sửa lỗi đó. –

+1

'int maxDays = Math.min (1, MOODS.size());' cũng nên sửa khi kích thước là '0'. – 4castle

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