2015-01-25 2 views
0

Мой метод принимает три параметра. a - массив целых чисел, low - это низкое число в диапазоне, а высокое - большое число. Я пытаюсь выполнить поиск по массиву, чтобы найти числа между низким и высоким, добавить их в другой массив и вернуть новый массив.Нежелательный нуль в массиве

Массив, который я возвращаю, всегда начинается с нуля, даже если ноль не включен в начальный массив. Например, если a = {7, 9}, при низком уровне 5 и максимуме 7, b - {0, 7, 9}. Может кто-нибудь дать мне несколько советов о том, что я делаю неправильно.

public static int[] range(int[] a, int low, int high) { 

    int[] b = new int[0]; 
    if (a == null || a.length == 0) { 
    throw new IllegalArgumentException(); 
    } 
    else { 
    for (int i = 0; i < a.length; i++) { 
     if (a[i] >= low && a[i] <= high) { 
      b = Arrays.copyOf(b, 
       b.length + 1); 
      b[b.length - 1] = a[i]; 
     } 
    } 
    } 
    return b; 
} 

Это тест, который держит неудачу

@Test public void Selector_range_1() { 
    int[] a = {1, 9, 7, 5, 3}; 
    int low = 1; 
    int high = 9; 
    int[] e = {1, 9, 7, 5, 3}; 
    Assert.assertArrayEquals(e, Selector.range(a, low, high)); 
} 
+0

Это прекрасно работает для меня: 'range (new int [] {7,9}, 5, 7)' возвращает '{7}'. – Todd

+0

Это работает отлично [demo] (http://ideone.com/TgFn1u). – dasblinkenlight

+3

Этот код будет проще и работает намного быстрее, с 'ArrayList'. –

ответ

0

Я не думаю, что нет ничего плохого с кодом, когда я запускаю его я не могу воссоздать проблему. Я думаю, что проблема лежит где-то еще в вашем коде. Возможно, вы сохраните результат в массиве с 0 в нем.

public static void main(String[] args) { 
    int[] a = {7,9}; 
    int[] b = range(a, 0,10); 

    for (int i = 0; i < b.length; i++) { 
     System.out.println(b[i]); 
    } 


} 

public static int[] range(int[] a, int low, int high) { 

     int[] b = new int[0]; 
     if (a == null || a.length == 0) { 
     throw new IllegalArgumentException(); 
     } 
     else { 
     for (int i = 0; i < a.length; i++) { 
      if (a[i] >= low && a[i] <= high) { 
       b = Arrays.copyOf(b, 
        b.length + 1); 
       b[b.length - 1] = a[i]; 
      } 
     } 
     } 
     return b; 
    } 
+0

Я попытался изменить имя массива, но у меня все еще такая же проблема. – me123

+0

Так что если вы, запустите мой код, вы все равно получите {0,7,9}? Нам сложно угадать, что происходит вокруг вашего метода, но метод, похоже, не является проблемой. –

+0

Я попытался настроить тот же jUnit, что и вы, и кажется, что он прошел. [изображение прохождения теста] (http://imgur.com/cI7JKUq), я не знаю, почему ваш тест терпит неудачу. –

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