gerader Index im Array

LeonInfo19

Bekanntes Mitglied
Hallo, ich will eine Methode schreiben, die ersten (bis zu) n Array-Elemente mit geraden Indizes als neues Array ausgibt.

Meine Idee:
Java:
public int[] even(int zahl, int a []) {
    int b[]=new int[0];   
    int c[]=new int[0];
    if(a.length % 2== 0) {
        b =new int[a.length/2];
    }
    else {
        b =new int[a.length/2+1];
    }
   
    int j=0;
    for(int i=0; i<a.length; i+=2) {
        b[j]=a[i];
        j++;
    }
    j=0;
    if(zahl>=b.length) return b;
    for (int i=0;i<zahl; i++) {
        c[j]=b[i];
    }
   
    return c;
   
   
    }

Als erstes habe ich einfach in Abhängigkeit der Länge des übergebenen Arrays a die Länge eines neuen Arrays b ermittelt, das nur die Zahlen an den geraden Indizes enthält.
Dann speicher ich diese Zahlen in b. Der Rest ist dann eine einfache Unterscheidung. Es kann ja sein, dass man mehr Zahlen haben will als das Array a groß ist.

Ist das so ok oder geht das einfacher?
 
Deins funktioniert momentan noch nicht, da du dein Array c mit einer Länge von 0 initialisiert.
Generell geht das aber auch einfacher:
Java:
  public static void main(String[] args) {
    System.out.println(Arrays.toString(extractEvent(10, new int[]{1, 2, 3, 4, 5})));
    System.out.println(Arrays.toString(extractEvent(2, new int[]{1, 2, 3, 4, 5})));
    System.out.println(Arrays.toString(extractEvent(10, new int[]{1, 2, 3, 4, 5, 6})));
    System.out.println(Arrays.toString(extractEvent(0, new int[]{1, 2, 3, 4, 5, 6})));
  }
 
  private static int[] extractAtEvenIndices(int bound, int[] data) {
  
    int size = Math.min(bound, (int)Math.ceil(data.length/2.));
    int[] result = new int[size];
  
    for(int i = 0, j = 0; i < data.length && j < result.length; i+=2, j++) {
      result[j] = data[i];
    }
  
    return result;
  }
Ausgabe:
Code:
[1, 3, 5]
[1, 3]
[1, 3, 5]
[]
 
Danke für deine Antwort. Ich versteh deins leider nicht ganz, da ich viele Anweisungen gar nichr kenne.
Wenn ich einfach zum Schluss das int c[] mit der übergebene zahl initialisiere, passt es doch dann?
 
Als erstes habe ich einfach in Abhängigkeit der Länge des übergebenen Arrays a die Länge eines neuen Arrays b ermittelt, das nur die Zahlen an den geraden Indizes enthält.
Du musst nur 1 zur Länge des Arrays a addieren und dann durch 2 teilen. Dann brauchst Du keine Fallunterscheidung mehr, ob die Länge gerade oder ungerade ist 🙂

Ich übersetze mal den Code von @Robat:
Java:
private static int[] extractAtEvenIndices(int bound, int[] data) {
    int size = (data.length+1) / 2;
    if (size > bound) {
        size = bound;
    }
    int[] result = new int[size];
 
    for(int i = 0; i < result.length; i++) {
      result[i] = data[2*i];
    }
 
    return result;
}
 
Danke für eure Hilfe🙂
Nur kurz eine Frage: Ich hatte mein Programm getest mit dem falschen Array c der Länge 0. Warum hat das in Eclipse dann trotzdem funktioniert. Macht die Umgebung gewisse Dinge alleine?
 
Ein Array ist ein komplexer Datentyp. Diese werden als Referenz auf einen Speicherplatz gespeichert und nicht wie primitive als Inhalt selbst. Somit hast du im Zeile 5 bzw 8 eine neue Referenz zum Array angelegt. Der alte Array ist damit tot und der neue lebt 😉
 
Dein Code dürfte ohne Fehler laufen, wenn zahl >= (a.length + 1)/2 gilt. Erst, wenn zahl kleiner ist, wird c überhaupt verwendet.
 

Zurück
Oben