2015-11-08 1 views
-1

Я пытаюсь подсчитать количество инверсий в массиве. Я получаю результат 3, когда это должно быть 4. Вот мой код.Почему я не получаю правильный выход?

int[] array1 = new int[5]; 
array1[0] = 3; 
array1[1] = 7; 
array1[2] = 10; 
array1[3] = 6; 
array1[4] = 4; 

int count = 0; 
for(int i =0;i<array1.length;i++){ 

    for(int j =i+1;j<array1.length;j++){ 

     if(array1[i]> array1[j]){ 

     count++; 
    } 
} 
} 
System.out.println(count); 

Кто-нибудь знает, почему это делается? благодаря

+2

ArrayIndexOutOfBoundException здесь. Вы увеличиваете 'i' до array1.length. Он должен быть «<» не «<=» –

+0

почему i ++ j ++ внутри цикла. проверьте логику приращения цикла. – bakki

+0

спасибо за подсказку, я изменил его, но я все равно получаю 3 – lc112

ответ

0

Удалить j ++ и i ++. Также измените исходное положение j на i + 1, а не на 0.

int[] array1 = new int[5]; 
array1[0] = 3; 
array1[1] = 7; 
array1[2] = 10; 
array1[3] = 6; 
array1[4] = 4; 

int count = 0; 
for(int i =0;i<array1.length;i++){ 

    for(int j=i+1;j<array1.length;j++){ 

     if(array1[i]> array1[j]){ 
      count++; 
     } 

    } 
} 
System.out.println(count); 
+0

Я сделал то, что вы предложили перед рукой, и я получил 6, но от изменения j от 1 до i + 1 это сработало: d большое спасибо – lc112

0

i++ и j++ индекс инкрементации не должно повторяться в теле ваших for петель, как они уже существуют в той же строке условий цикла в for.