Perguntas sobre copyEven em java

Oct 12 2020

A questão é a seguinte:

Escreva um método Java int[] copyEven(int[] nums)que copie elementos em índices pares para uma nova matriz.

Ele deve retornar a nova matriz de comprimento correto com esses elementos dentro.

Por exemplo

copyEven([1, 2, 3]) → [1, 3]
copyEven([1, 2, 3, 4]) → [1, 3]

Abaixo está o meu código:

public static int [] copyEven(int[] nums){
    int n =nums.length;
    int a=0;
    for (int i=0;i<n;i++){
        if (nums[i]%2 !=0){
            a++;
    }
    int c=a;
    int [] arr=new int[c];
    int b=0;
    for (int j=0;b<a;j++){
        if (nums[j]%2 !=0){
            arr[b]=nums[j];
            b++;}
        }
    }
    return arr;
}

Sou apenas um iniciante em código e esta é a primeira vez que uso este site. Eu pesquisei online e descobri que em questões semelhantes, o número de números ímpares é fornecido. Portanto, pretendo usar ano código para contar o número de números ímpares no início e, em seguida, criar uma nova matriz para concluir a pergunta. No entanto, o NetBeans me disse que em int [] arr=new int[c], o array é gravado, nunca lido. Eu não entendo o que isso significa. Eu agradeceria muito se você pudesse me ajudar, obrigado!

Respostas

MikheilZhghenti Oct 12 2020 at 18:25

Aqui você pode obter todos os elementos em índices pares.
A indexação começou em 1, conforme os exemplos fornecidos.

public static int[] copyEven(int[] nums) {
    int length = nums.length;
    int numberOfEvenNumbers = (length % 2 == 0) ? length / 2 : length / 2 + 1;

    int[] copy = new int[numberOfEvenNumbers];
    int index = 0;

    for (int i = 0; i < nums.length; i += 2) {
        copy[index] = nums[i];
        index++;
    }
    return copy;
}