Fragen zu copyEven in Java

Oct 12 2020

Die Frage lautet wie folgt:

Schreiben Sie eine Java-Methode int[] copyEven(int[] nums), die Elemente an geraden Indizes in ein neues Array kopiert.

Es muss das neue Array mit der richtigen Länge und den darin enthaltenen Elementen zurückgeben.

Zum Beispiel

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

Unten ist mein Code:

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;
}

Ich bin nur ein Anfänger im Code und benutze diese Website zum ersten Mal. Ich habe online gesucht und festgestellt, dass bei ähnlichen Fragen die Anzahl der ungeraden Zahlen angegeben ist. Daher plane ich, aim Code zuerst die Anzahl der ungeraden Zahlen zu zählen und dann ein neues Array zu erstellen, um die Frage zu beenden. NetBeans teilte mir jedoch mit, dass int [] arr=new int[c]das Array in geschrieben und niemals gelesen wird. Ich verstehe nicht, was das bedeutet. Ich würde mich sehr freuen, wenn Sie mir helfen können, danke!

Antworten

MikheilZhghenti Oct 12 2020 at 18:25

Hier können Sie alle Elemente zu geraden Indizes erhalten.
Die Indizierung begann bei 1, wie in Ihren Beispielen angegeben.

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;
}