# Array schnell löschen / auf 0 setzen



## DocNoNo (16. Jan 2008)

Tach auch

Ich beschäftige mich seit ein paar Tagen mit Java und habe nun mein erstes kleines Programm fertig. Jetzt stehe ich vor einem kleinen Problem:

Ich verwende in einer Schleife ein Array. Dieses wird in der Schleife mit Werten gefüllt, muss beim nächsten Schleifendurchgang aber wieder "leer" sein (alle Werte auf 0). nun gibt es wohl verschiedene Möglichkeiten dieses Problem zu lösen, mich würde aber mal interessieren welche die beste ist.

Variante 1:

```
while(bedingung){
   int[] feld = new int[10];
     // tuwas mit dem Array und befülle es mit Werten
   feld = null;
}
```

Variante 2:

```
int[] feld = new int[10];

while(bedingung){
  for(x=0;x<9;x++)
       feld[x] = 0;
   // tu Array voll machen
}
```

Naja, es gibt wohl noch andere Möglichkeiten. Ich frage mich halt nur wie es am effektivsten hinbekomme das dass Array bei jedem Schleifendurchgang quasi geleert wird.


----------



## SlaterB (16. Jan 2008)

was heißt schon effektiv,
Variante 1 ist im Code einfacher, aber erzeugt neue Objekte, 
was allgemein nicht so schön ist und wahrscheinlich länger dauert, im Millisekundenbereich aber kaum eine Rolle spielt


----------



## Gast (16. Jan 2008)

Arrays.fill(feld, 0);


----------



## Guest (16. Jan 2008)

DocNoNo hat gesagt.:
			
		

> Ich verwende in einer Schleife ein Array. Dieses wird in der Schleife mit Werten gefüllt, muss beim nächsten Schleifendurchgang aber wieder "leer" sein (alle Werte auf 0).


Kannst Du den entsprechenden Code mal zeigen? Wenn Du ausschließlich schreibend auf das Array zugreifst ist es doch egal, ob da noch Berechnungen von vorher drin stehen. Oder liest Du auch aus dem Array und brauchst dann die 0?



			
				DocNoNo hat gesagt.:
			
		

> feld = null;


Das feld = null kannst Du Dir sparen, weil die Variable anschließend eh ihren Sichtbarkeitsbereich verlässt und damit stirbt.



			
				DocNoNo hat gesagt.:
			
		

> for(x=0;x<9;x++)


So wird das letzte Element mit dem Index 9 aber nicht gelöscht! Es muss heissen x<10, oder noch besser:


```
for (int x=0; x<feld.length; ++x)
```

Aber wie bereits gepostet ist Array.fill(feld, 0); sicherlich die beste Wahl.


Fred


----------



## Leroy42 (16. Jan 2008)

Anonymous hat gesagt.:
			
		

> Wenn Du ausschließlich schreibend auf das Array zugreifst ist es doch egal



*LOL*

Wird dieses Array dann automatisch vom Compiler in das WOM abgelegt?  ???:L


----------



## DocNoNo (16. Jan 2008)

Arrays.fill() sieht gut aus. Danke. Habe noch nicht so den Überblick über alle Funktionen und Klassen.

@Gast:
Welchen Sinn soll es haben ein Array mit Werten zu füllen und sie anschließend nicht auszulesen? Also ich fülle in der Schleife das Array mehrfach mit Werten und lese sie natürlich auch wieder aus.

Warum ich bei jedem Schleifendurchlauf die Größe des Arrays ermitteln soll, wo ich sie doch zwei Zeilen vorher selber festgelegt habe, erschließt sich mir auch nicht so ganz.
Das da nun x<9 anstatt x<10 steht ist erstmal völlig wumpe. Ist ja schließlich nur ein Beispiel welches das Problem verdeutlichen soll. Und das habe ich mir flott aus dem Handgelenk geschüttelt.

Trotzdem großes *Danke Schön* an alle. Das Forum hat mir schon bei so einigen Sachen auf die Sprünge geholfen.


----------



## SlaterB (16. Jan 2008)

natürlich war 'Arraynutzung durch vollständiges Schreiben des Arrays vor jeweiligen Lesen' gemeint,
ein Witz geht ja noch, aber länger muss man darüber auch nicht diskutieren 

> Warum ich bei jedem Schleifendurchlauf die Größe des Arrays ermitteln soll, wo ich sie doch zwei Zeilen vorher selber festgelegt habe, erschließt sich mir auch nicht so ganz

wenn du später mal die Arraygröße auf 20 umstellst, vergisst du vielleicht an andere Stelle auch umzustellen,
hier heißt es abwägen, lieber den PC nochmal 1 microsekunde arbeiten lassen als den Code kompliziert zu gestalten,
aber man kann auch die Variante mit der Zahl lesbarer sehen, denkbar ist vieles


----------



## Guest (16. Jan 2008)

DocNoNo hat gesagt.:
			
		

> @Gast:
> Welchen Sinn soll es haben ein Array mit Werten zu füllen und sie anschließend nicht auszulesen?


Mir geht es darum, ob Du die Werte bereits BEIM BEFÜLLEN ausliest (etwa, weil Du Teilsummen bildest oder was weiß ich). Falls nicht ist es doch egal, was durch die vorherige Iteration drinsteht, dann brauchst Du das Array auch nicht "löschen".

Bitte zeige den Code, in dem Du das Array befüllst, um Zweifel zu beseitigen.



			
				DocNoNo hat gesagt.:
			
		

> Warum ich bei jedem Schleifendurchlauf die Größe des Arrays ermitteln soll, wo ich sie doch zwei Zeilen vorher selber festgelegt habe, erschließt sich mir auch nicht so ganz.


Weil i<array.length ein Idion ist, dass jeder Java-Programmierer kennt und sofort versteht. "Ah, da will jemand alle Elemente berarbeiten!"

Außerdem ist der Code so robuster gegenüber Änderungen, was Slater ja bereits erläutert hat.

Ansonsten mal nach "magic numbers" googeln.


Fred


----------

