2013-09-02 3 views
0

Я написал этот метод, чтобы найти число значений, которые больше определенного значения в массиве, и оно работает с суффиксами с положительными целыми числами, но когда я пробовал это тестовый случай не удался.Поиск массива для определенного числа целых чисел, превышающих одно целое

public static int numGreater(int[] a, int val) { 
     if (a == null || a.length == 0) { 

     throw new IllegalArgumentException();   
     } 



     int[] copy = Arrays.copyOf(a, a.length); 
     Arrays.sort(copy); 

     int answer = 0; 

     int nearest = copy[0]; 
     for (int i = 0; i < copy.length; i++) { 

     if (Math.abs(nearest - val) > Math.abs(copy[i] - val)) { 

      nearest = copy[i]; 
      answer = (copy.length - 1) - i; 
     }  
     }   


     return answer; 
    } 

Вот тестовая версия, в которой я работал с JUnit.

int z[] = {-5,-2,0,4,8,15,50}; 


@Test public void numGreaterTest1() { 

     Assert.assertEquals(7, Selector.numGreater(z, -99)); 

} 

Любые идеи о том, где я поступил не так?

+0

чувствует себя как java? – user1759572

+0

Да, извините, это обязательно должно быть указано в теге. – user2738319

+0

Зачем беспокоиться о таком алгоритме? Было бы проще просто запустить массив и построить новый массив, состоящий только из более крупных значений? – user1759572

ответ

0
public static int numGreater(int[] a, int val) { 
     if (a == null || a.length == 0) { 
     throw new IllegalArgumentException();   
     } 

     int answer = 0; 

     for (int i = 0; i < a.length; i++) { 
     if (a[i]>val) { 
      answer++; 
     }  
     }   


     return answer; 
    } 
+0

a не обязательно сортируется, поэтому вам нужно отсортировать его раньше, поэтому он использует копию. Также возвращаемое значение должно быть a.length - answer. –

+0

Ничего себе, я определенно думал об этом. Я вижу, что это скорее вопрос сортировки, чем поиск. – user2738319

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