2015-07-14 4 views
0

При выполнении этого кода выход «140», который равен «28 * 5», но должен быть «150», который равен «28 + 31 + 30 + 31 + 30», он должен рассчитать дней между 2 месяцами «feb» и «july» ... Значит, это означает, что цикл for работает неправильно или что? и почему так ! ты можешь мне помочь здесь? PS: Я пытался изменить J ++ в цикле до J + 1, но Android-студия говорит «что это не заявление»Неправильно работает петля

int[] pair = {1,3,5,7,8,10,12}; 
int[] impair = {4,6,9,11}; 
int x=0; 
int j; 
int year=2015; 
int mm=2; 
int month=7; 
String msg=""; 
if (month>mm) { 
    for (j = mm; j<month; j++){ 
     if (Arrays.asList(impair).contains(j)){ 
      x = 31 + x; 
     }else if(Arrays.asList(pair).contains(j)){ 
      x = 30 + x; 
     }else{ 
      if (year%4==0) { 
       x= 29 + x; 
      }else{ 
       x= 28 + x; 
      } 
     } 
    } 
    System.output.println(x); 
} 
+4

Вы пробовали отладки и шаговый через вашу программу по очереди? – sstan

+1

теперь есть блестящая идея! – Drew

+1

Да, я пробовал это сделать и даже изменил много вещей, как 4 раза, но я не мог исправить это –

ответ

8

Вы пытаетесь преобразовать int[] к List<Integer> по телефону Arrays.asList. Но это приводит к List<int[]> одного элемента (оригинал int[]), который не содержит значения j. Причина указана в Arrays.asList() not working as it should? - это общий метод, а параметр типа должен быть ссылочным типом. int[] является ссылочным типом (как и все массивы), но int нет.

Именно поэтому тесты полностью терпят неудачу и 28 неоднократно выбрано для добавления.

Изменение заявленных типов pair и impair от int[] к Integer[], так что Arrays.asList будет определить тип как Integer (ссылка типа) правильно. Тогда метод contains будет работать, как ожидалось. С этим изменением я получаю 150.

+3

Ницца. Также необходимо исправить неверный тест для високосного года: год% 4 == 0 является неполным. Должно быть что-то вроде: ((год% 4 == 0) && (год% 100! = 0)) || (год% 400 == 0) – jarmod

+1

Немного больше информации - есть явная ошибка с массивами пар/недостатков и 31/30 вместо назначения 30/31 дней. – piotrpo

+0

Очень приятно поймать! – Soley

1

Это потому, что asList() требует объект класса, который является либо коллекцией, либо итерабельным. Вы можете изменить свой код следующим образом: -

Integer[] pair = {1,3,5,7,8,10,12}; 
Integer[] impair = {4,6,9,11}; 
int x=0; 
int j; 
int year=2015; 
int mm=2; 
int month=7; 
String msg=""; 
if (month>mm) { 
    for (j = mm; j<month; j++){ 
     if (Arrays.asList(impair).contains(new Integer(j))){ 
      x = 31 + x; 
     }else if(Arrays.asList(pair).contains(new Integer(j))){ 
      x = 30 + x; 
     }else{ 
      if (year%4==0) { 
       x= 29 + x; 
      }else{ 
       x= 28 + x; 
      } 
     } 
    } 
    System.output.println(x); 
} 

Это должно дать правильный результат.

Смежные вопросы