do-while in while < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 06:50 Do 17.11.2011 | Autor: | mikexx |
Aufgabe | Folgende Methode ist gegeben:
public int doWhile(int b){
int a = 0;
do {
if ( b > 0 ) {
a = a+3*b;;
} else {
a = a-2*b;
}
} while ( a < b);
return a;
}
Erstelle eine zweite Methode jetztWhile, die äquivalent zur Methode doWhile ist, aber stattdessen eine while-Schleife benutzt. Die Methode jetztWhile darf genau eine if-else-Anweisung enthalten. |
Hallo, liebes Team!
Ich komme bei dieser Aufgabe nicht weiter.
Normalerweise würde ich einfach folgendermaßen vorgehen:
Anweisung
while(Ausdruck)
Anweisung
Also:
public int jetztWhile(int b){
int a = 0;
if (b > 0) {
a = a+3*b;
} else {
a = a-2*b;
}
while ( a < b )
{ if (b > 0){
a = a+3*b;
} else {
a= a-2*b;
}
}
return a;
}
Aber dann hätte ich in der neuen Methode ja zwei if-else-Anweisungen und es soll ja nur eine vorkommen.
Wer kann mir bitte einen Tipp geben?
Liebe Grüße
mikexx
|
|
|
|
Hallo!
Die einzige Möglichkeit, die ich sehe ist, daß zu dem a stets der gleiche Wert hinzuaddiert wird. Entweder 3b oder (-2b)
Also:
int c;
if(b>0){
c=3*b;
}
else{
c=-2*b;
}
Damit reduziert sich der Inhalt der Schleife auf
a=a+c;
Dann kannst du natürlich das machen, was du schon vorschlägst, also einmal a=a+c, und danach die while-Schleife. Aber es geht noch kürzer, zumindest in C:
int a=0;
int c;
if(b>0){
c=3*b;
}
else{
c=-2*b;
}
while( (a=a+c)<b){}
Man kann Anweisungen nämlich auch im while() platzieren, und interessanterweise erhöht (a=a+c) nicht nur a um c, sondern liefert den Wert der Addition auch zurück, sodaß hier tatsächlich zuerst a vergrößert wird, und dann der Vergleich ausgeführt wird, der von dem while() ausgewertet wird.
Du solltest aber prüfen, ob Java das auch kann!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:04 Do 17.11.2011 | Autor: | mikexx |
Das mit dem a=a+c find ich eine coole Idee!
Zuerst wird geguckt, ob die übergebene Zahl b größer oder kleiner/gleich 0 ist und je nachdem, was der Fall ist, wir die Variable c initialisiert.
Dann setzt man a=a+c.
Dann geht es in die Schleife. Sofern a<b ist, wird immer wieder a=a+c gerechnet. Da sich an dem b ja nix ändert und man vorher schon geschaut hat, welcher Fall für b eintritt, ist das c immer noch richtig und bleibt es die ganze Zeit.
So verstehe ich Deine Idee und die funktioniert natürlich super.
1000 Dank!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:30 Do 17.11.2011 | Autor: | dennis2 |
Ich finde die Idee auch gut.
Jedoch ist es doch hier (und auch bei der ursprünglichen Methode) so, daß nach einer Durchführung die Bedingung a<b NIE erfüllt ist.
Deswegen frage ich mich, ob man nicht theoretisch (in beiden Codes) das mit der do-while bzw. while-Schleife einfach weglassen kann.
Sprich: Es reicht doch theoretisch auch, wenn man nur die if-else-Anweisung durchführt und dann a+c als Wert zurückgibt.
Aber vermutlich soll man hier einfach den vorhandenen Code in eine while-Schleife umschreiben, egal, wie sinnvoll die gegebene und die neu geschriebene Methode eigentlich sind.
?
|
|
|
|