# Elemente aus Array entfernen



## scav (20. Mrz 2005)

hallo,

ich hab ein int[] array und muss daraus alle ungeraden zahlen entfernen. was ungerade ist und was nicht finde ich per % 2 raus...soweit so gut. nun frage ich mich wie ich es am besten anstelle, das neue array ohne die ungeraden zurückzuliefern. als rückgabe muss ebenfalls ein in[] array zurückgegeben werden.

nun habe ich mir überlegt wie ich vorgehen soll.

java.lang.reflect.Array bietet keine möglichkeiten ein element zu entfernen. lang.util.Arrays mit der methode remove jedoch schon. toll dachte ich, aber nix da. wenn ich das element aus dem array entferne landet die forschleife die eben das macht mit einer index-out-of-bound-exception im aus.

dann habe ich mir gedacht, probiere ich den wert einfach null zu setzen. aber auch das geht nicht: "Type mismatch: cannot convert from null to int".

dann dachte ich mir, ich lege ein dynamisches array per arraylists an. da scheitert dsa ganze aber, daß er nicht zu int[] casten kann.

hat wer eine idee wie ich das simple problem lösen kann?

danke,
scav


----------



## mic_checker (20. Mrz 2005)

Mal ne simple Frage: Musst du das ganze mit Arrays machen oder darfst du auch ArrayList verwenden?


----------



## Gast (20. Mrz 2005)

ich muss ein int[] zurückliefern und bekomme ein int[] übergeben. der rest ist meine angelegenheit


----------



## mic_checker (20. Mrz 2005)

Hmm...es geht sicher auch anders (einfacher), aber warum machst du aus dem Array keine ArrayList (in der Methode), gehst du ArrayList durch, guckst mit %2 ob es gerade/ungerade ist und löschst je nachdem aus der Liste.

Du musst allerdings beim Löschen auf die Seiteneffekte aufpassen, je nachdem wie deine Schleife aussieht. Am einfachsten wäre es vielleicht wenn du von hinten nach vorne durchgehst, dann brauchst nicht zu überlegen wann du die zählvariable dekrementierst. 

Am Ende wandelst du das ganze wieder in ein Array um und gibst es zurück


----------



## Gast (20. Mrz 2005)

```
int[] gerade(int[] array){
		int anzahl = 0;
		for(int k = 0; k < array.length; k++){
			if(array[k] % 2 == 0){
				anzahl++;
			}
		}
		int[] gerade = new int[anzahl];
		anzahl = 0;
		for(int k = 0; k < array.length; k++){
			if(array[k] % 2 == 0){
				gerade[anzahl] = array[k];
				anzahl++;
			}
		}
		return gerade;
	}
```

_Edit von L-ectron-X: Code-Tags eingefügt._


----------



## mic_checker (20. Mrz 2005)

Ach, manchmal glaub ich , dass ich so verliebt in ArrayList bin, das ich an andere Sachen gar nicht mehr denke 

Btw. Code Tags wären nicht schlecht....


----------



## Guest (20. Mrz 2005)

Gast hat gesagt.:
			
		

> ```
> int[] gerade(int[] array){
> int anzahl = 0;
> for(int k = 0; k < array.length; k++){
> ...


dankeschön, das ist natürlich auch eine möglichkeit 

allerdings meinem gefühl nach nicht die elleganteste. gibts da nicht noch was anderes?

mic_checker: deine variante wäre eleganter oder? einfach das ganze per toArray(int[] a) in ein int[] array umwandlen und fertig? 

hmmm


----------



## Guest (20. Mrz 2005)

Noch 'ne Variante.
	
	
	
	





```
public static int[] gerade(int array[]) {
  int gerade[] = new int[array.length];
  int anzahl = 0;
  for(int i : array) {
    if(i % 2 == 0)
      gerade[anzahl++] = i;
  }
  int result[] = new int[anzahl];
  System.arraycopy(gerade, 0, result, 0, anzahl);
  return result;
}
```
Das mit ArrayList etc. würde nur dann gehen, wenn der Rückgabetyp ein Integer-Array wäre.

```
public static Integer[] geradeA(int array[]) {
  List<Integer> gerade = new ArrayList<Integer>();
  for(int i : array) {
    if(i % 2 == 0)
      gerade.add(i);
  }
  return (Integer[])gerade.toArray(new Integer[0]);
}
```


----------



## Guest (20. Mrz 2005)

Kleine Korrektur
	
	
	
	





```
return (Integer[])gerade.toArray(new Integer[gerade.size()]);
```


----------

