Метод для копирования простых чисел из одного массива в другой в Java - PullRequest
0 голосов
/ 28 марта 2019

Я довольно новичок в Java и пытаюсь найти способ скопировать все простые числа внутри массива и скопировать их в другой массив.

Для этого я реализовал отдельный метод isPrime(), чтобы проверить, является ли элемент простым, и другой метод, который подсчитывает число простых чисел в этом массиве countPrimes(), так что я могу определить новый массив размер.

Вот где я застрял:

public static int[] primesIn(int[] arr) {
    int primeHolder = countPrimes(arr);
    int[] copyArr = new int[primeHolder];
    for (int i = 0; i < arr.length; i++) {
        if (isPrime(arr[i]) == true) {
            copyArr[>Needs to start from 0<] = arr[i];
        }
    }
    return copyArr;
}

int[] arrayMan = {3,5,10,15,13};

В copyArr позиция должна быть 0, за которой следует +1 каждый раз, когда она находит простое число. Если бы я дал ей позицию i, как в copyArr[i] = arr[i], то сказал бы, что штрих находится в позиции 5, он попытался бы сохранить премьер в позиции 5 из copyArr, которая не существует если бы в исходном массиве было только три простых числа, то длина copyArr составила бы только три.

Что-то подсказывает мне другой цикл for, или, может быть, поможет еще один, но я не понимаю, как мне это реализовать. Помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Внимательно прочитайте ваши слова:

При copyArr позиция должна быть 0, за которой следует +1 каждый раз, когда она находит простое число.

Это означает, что индекс в новом массиве не зависит от его позиции в старом массиве.
Создать счетчик.И каждый раз, когда вы помещаете простое число в новый массив, увеличивайте его на 1. Таким образом, вы всегда можете знать, куда поместить новое число.

1 голос
/ 28 марта 2019

Есть вторая индексная переменная int primeCount, и увеличивайте ее всякий раз, когда вы найдете простое число. Нет необходимости во 2-й петле.

В современные дни с обильной памятью, как правило, все не так. Если у вас нет дополнительных жестких требований, вы можете просто использовать изменяемый размер ArrayList<Integer> и add(). (и при необходимости преобразовать его обратно в int [] в конце). Это также лучше в этом случае, потому что обычно ваш countPrimes вызов будет выполняться намного медленнее, чем перераспределения ArrayList.

...