# java kellerspeicher



## teddy-exe (14. Nov 2011)

hi

wir haben eine programmieraufgabe...da fehlen mir aber noch ein paar zeilen code

wie kann ich folgenden code verstehen und anders schreiben?



```
return !bs.isEmpty()?( (Object[] )bs.top())[tb]:null;
```
diese zeile soll tb an die neuste kachel leiten...aber so ganz verstehen tu ichs nicht....
müsste eine if abfrage sein
wenn bs(ein dynamischer keller) nicht leer ist, passiert...?
falls der dynamische kellerspeicher leer ist, passiert null




```
((Object[])bs.top())[tb] = obj;
```

ist ja fast das gleiche....aber verstanden habe ich es nicht....




ebenso hier:

```
((Object[])bs.top())[++tb] = obj;
```
das soll ein neues objekt an der stelle von tb einsetzen




also diese codezeilen habe ich nicht richtig verstanden und würde sie auch ganz gerne umformulieren....

bei bedarf pn´ne ich auch mehr code


----------



## Tomate_Salat (14. Nov 2011)

```
return a?b:c;
// ist das selbe wie
if(a) {
   return b;
} else {
   return c;
}
```

Das nennt sich im übrigen "ternärer Operator"


----------



## nrg (14. Nov 2011)

```
return !bs.isEmpty()?( (Object[] )bs.top())[tb]:null;
```

ist das gleiche wie:

```
if (!bs.isEmpty()) {
     return ((Object[])bs.top())[tb];
} else {
     return null;
}
```
siehe auch: ternärer Operator und casting.


```
((Object[])bs.top())[tb] = obj;
```
castet bs.top() in ein Object-Array und setzt in den index tb das Object obj.


```
((Object[])bs.top())[++tb] = obj;
```
castet bs.top() in ein Object-Array, inkrementiert (vor dem setzten) tb um 1 und setzt an diesen index das Object obj.


----------



## teddy-exe (14. Nov 2011)

nrg hat gesagt.:


> ```
> return !bs.isEmpty()?( (Object[] )bs.top())[tb]:null;
> ```
> 
> ...



zu 1. kommt mir bekannt vor....aber dass das auch bei einer returnanweisung geht, wusste ich nicht

zu 2. als index ein object? mir auch neu....oh man, ich muss noch einiges machen -,-

zu 3. ist ja ähnlich dem 2.


----------



## nrg (14. Nov 2011)

keine ahnung, was tb genau ist aber ich nehme mal an ein int


----------



## Tomate_Salat (14. Nov 2011)

teddy-exe hat gesagt.:


> zu 1. kommt mir bekannt vor....aber dass das auch bei einer returnanweisung geht, wusste ich nicht



Hat mit der return-anweisung nicht viel zu tun. War jz nur in dem Beispiel so. 


```
String irgendwas=bedingung ? "wahr" : "falsch";
//wäre hier gleich wie:
String irgendwas;

if(bedingung) {
    irgendwas="wahr";
} else {
   irgendwas="falsch";
}
```

ginge zum Beispiel auch.



> zu 2. als index ein object? mir auch neu....oh man, ich muss noch einiges machen -,-


tb ist hier wohl ein Integer:

```
int tb=42;
```
somit kannst du das als Index verwenden.



> zu 3. ist ja ähnlich dem 2.


Hier geht es eben um die incrementation. Beispiel:

```
String[] werte={"a","b"};
int index1=0;
int index2=0;
System.out.println(werte[index1++]); // gibt a aus;
System.out.println(werte[++index2]); // gibt b aus, weil zuerst incrementiert wird
```


----------



## teddy-exe (14. Nov 2011)

Tomate_Salat hat gesagt.:


> Hat mit der return-anweisung nicht viel zu tun. War jz nur in dem Beispiel so.
> 
> 
> ```
> ...



stimmt..ich habe völlig falsch gedacht...



> tb ist hier wohl ein Integer:
> 
> ```
> int tb=42;
> ...



jup tb ist ein int, was die oberste kachel eines knotens definiert. 



> Hier geht es eben um die incrementation. Beispiel:
> 
> ```
> String[] werte={"a","b"};
> ...



kann man eigentlich 

((Object[])bs.top())[tb] = obj;


etwas anders schreiben?


----------



## Tomate_Salat (14. Nov 2011)

teddy-exe hat gesagt.:


> kann man eigentlich
> 
> ((Object[])bs.top())[tb] = obj;
> 
> ...



Du könntest mit dem Objekt arbeiten, dass top() zurückliefert.


----------

