Метод, который смотрит на массив int и игнорирует кратные числа - PullRequest
0 голосов
/ 12 мая 2018

Я делаю метод, который игнорирует кратные.Входные данные ..
int[] Eliminate = new int[]{1, 54, 20, 17, 60};

это код ..

public static int[] EliminateMultiples(int[] List, int Num) {
int[] New = new int[List.length];
    int NewListIndex = 0;
    for (int i=0; i<List.length; i++) { 
        if ((List[i] % Num !=0 )) {
            New[NewListIndex] = List[i];
        }
        NewListIndex++;
        System.out.println(New[i]);
    }
    return New;
}

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

Ответы [ 2 ]

0 голосов

Вот решение, которое сделает вас массивом правильного размера.Он отличается от того, что NewListIndex помещается в if, а в конце массив «обрезается» до правильной длины.

public static int[] EliminateMultiples(int[] List, int Num) {
    int[] New = new int[List.length];
    int NewListIndex = 0;
    for (int i=0; i<List.length; i++) { 
        if ((List[i] % Num !=0 )) {
            New[NewListIndex] = List[i];
             NewListIndex++;
        }

    }
    int [] ret=Arrays.copyOfRange(New, 0, NewListIndex);

    return ret;
}
0 голосов
/ 12 мая 2018

Простое решение с Java 8 Streams:

public static int[] eliminateMultiples(int[] list, int num) {
    return Arrays.stream(list).filter(i -> i % num != 0).toArray();
}

Если вы также хотите распечатать каждый элемент, вы можете peek в поток и распечатать их:

public static int[] eliminateMultiples(int[] list, int num) {
    return Arrays.stream(list).filter(i -> i % num != 0).peek(System.out::println).toArray();
}

Если вам действительно нужно использовать массивы, вам нужно как минимум 2 цикла:

  1. Подсчет количества элементов:

    int count = 0;
    for (int element : list) {
        if (element % num != 0)
            count++;
    }
    
  2. Создание массива с количеством элементов (из 1.) и заполнение его.

    int[] result = new int[count];
    int i = 0;
    for (int element : list) {
        if (element % num != 0) {
            result[i++] = element;
        }
    }
    return result;
    

Как вы видите, это гораздо больше, чтобы написать.

...