# Array Besetzung



## lena_sonnenschein (20. Apr 2022)

Liebe alle,

ich weiß leider nicht wie ich auf diese Ausgabe komme.

in einer Java-Klasse werde ein Feld wie folgt deklariert und besetzt:



> int n=10;
> int[] f= new int[n];
> f[0]=2;
> f[1]=3;
> ...



_Wie ist das Feld nach Ablauf des Programmstückes besetzt?

Es wird ausgegeben:
0
0
0
1
0
5

mein Gedanke wäre:

i=3
f[3] = 2*3 + f[3-2]
f[3] = 6 + f[1]
f[3] = 6 +3
f[3] = 9

i=4
f[4] = 2*4 + f[4-2]
f[4] = 8 + f[2]
f[4] = 8 + 0
f[4] = 8

i=5
f[5] = 2*5 + f[5-2]
f[5] = 10 + f[3]
f[5] = 10 + 9
f[5] = 19_


----------



## KonradN (20. Apr 2022)

lena_sonnenschein hat gesagt.:


> Es wird ausgegeben:
> 0
> 0
> 0
> ...


Wo wird das ausgegeben? In dem Code ist noch keine Ausgabe. Und das ist nicht das Feld, denn Du hast 6 Werte aber in dem Array sind 10 Werte enthalten!



lena_sonnenschein hat gesagt.:


> i=4
> f[4] = 2*4 + f[4-2]
> f[4] = 8 + f[2]
> f[4] = 8 + 0
> f[4] = 8


Wieso ist f[2] bei dir 0? f[2] wurde im Code doch 8 zugewiesen.

Ansonsten kannst Du den Code jederzeit doch selbst ausprobieren und auch mit dem Debugger durchspielen. Ggf. noch Dinge ersetzen, so dass Berechnungen aufgeteilt werden. summand1 = 2*i; index = i-2; summand2 = f[index];
Dann hättest Du auch die Zwischenergebnisse. Wenn Du mit dem Debugger nicht klar kommst, dann bau einfach System.our.println Anweisungen ein.

Edit: Evtl. nur noch um es vorweg zu nehmen - das Array ist mit diesen Werten belegt: [2, 3, 8, 9, 16, 19, 28, 33, 44, 5] - Deine Berechnungen für Platz 3 und 5 sind somit ok. Mit dem richtigen Wert aus index 2 wird bei 4 auch die 16 kommen.


----------



## Jw456 (20. Apr 2022)

der Code wir nicht laufen
f_=2*i + f[i-2];
wird einen Compiler  Fehler gehben._


----------



## Jw456 (20. Apr 2022)

> _i=4_
> _f[4] = 2*4 + f[4-2]_
> _f[4] = 8 + f[2]_
> _f[4] = 8 + 0_
> _f[4] = 8_




```
i=4
 f[4] = 2*4 + f[4-2]
 f[4] = 8 + f[2]
 f[4] = 8 + 0  // fehler  f[2] ist noch 8, du hast erst bei 3 angefangen die Werte zu ändern
 
   
 f[4] = 16
```


----------



## httpdigest (20. Apr 2022)

Jw456 hat gesagt.:


> der Code wir nicht laufen
> f_=2*i + f[i-2];
> wird einen Compiler  Fehler gehben._


Da stand vermutlich eigentlich `f[i]=2*i + f[i-2]` und das i in eckigen Klammern wird außerhalb eines Code-Blocks (was dieser Block von ihm nicht war) immer als "beginne kursiv" interpretiert. Das siehst du daran, dass der ganze Text danach kursiv formatiert ist.


----------



## lena_sonnenschein (20. Apr 2022)

Vielen Dank für die Antworten.  Warum gibt die Konsole (siehe Bild) diese Werte aus?

obwohl wie @KonradN das Array mit folgenden Werten besetzt ist [9, 16, 19, 28, 33, 44, 5] , auch für mich nachvollziehbar.
Ist meine Ausgabe evtl nicht korrekt?


----------



## yfons123 (20. Apr 2022)




----------



## Jw456 (20. Apr 2022)

Ausgabe vor das "i++"

oder am Ende  nach der while  alles ausgeben.


```
for(int ausgabe : f){
      System.out.println(ausgabe);
}
```


----------



## lena_sonnenschein (20. Apr 2022)

Tausend Dank!


----------



## KonradN (20. Apr 2022)

Also wie schon erwähnt: Vor der Ausgabe hast Du den Index verändert und somit nicht mehr das berechnete Element ausgegeben.

Die Ausgabe würde ich daher auch ganz am Ende machen, wenn alles abgeschlossen ist. Und diesbezüglich kann man sich die Hilfsklasse Arrays ansehen - ein einfaches
`System.out.println(Arrays.toString(f));`
reicht, um ein Array auszugeben.


----------



## Jw456 (20. Apr 2022)

KonradN hat gesagt.:


> Also wie schon erwähnt: Vor der Ausgabe hast Du den Index verändert und somit nicht mehr das berechnete Element ausgegeben.
> 
> Die Ausgabe würde ich daher auch ganz am Ende machen, wenn alles abgeschlossen ist. Und diesbezüglich kann man sich die Hilfsklasse Arrays ansehen - ein einfaches
> `System.out.println(Arrays.toString(f));`
> reicht, um ein Array auszugeben.


ja das geht auch


----------

