3. Codetransformation switch-case
3. Codetransformation switch-caseWandeln Sie die Switch-case Verzweigung der Methode caseVerzweigung() um in if-Verzweigungen. Benutzen Sie hierzu den Rumpf der Methode ifVerzweigung(). Beide Methoden sollen die gleichen Ausgaben mit der Methode drucke() erzeugen.
public class Transformation { public static void main(String[] args) { caseVerzweigung(3); ifVerzweigung(3); } public static void drucke(String st) { System.out.println(st);} public static void caseVerzweigung(int s) { switch (s) { case 2: case 4: drucke("gerade"); break; case 1: drucke("eins"); break; case 3: drucke("drei"); break; default: drucke("unbekannt"); } // End switch } //Ende Methode caseVerzweigung public static void ifVerzweigung(int s) { // Lösung hier eintragen } // Ende Methode ifVerzweigung }// Ende Klasse Transformation
Niveau | 1 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Die Antwort ist bei der nächsten Frage zu finden (URL rechts unten)
Antwort zu Frage 2: Codetransformation
public class Schleifen { public static void main(String[] args) { int a = 3; int b = 4; int c; if ((a>=1) && (b>=1)) { c = doWhile(a,b); System.out.println(c); c = nurWhile(a,b);System.out.println(c); c = nurFor(a,b); System.out.println(c); } } // Ende main public static int doWhile(int a, int b) { int i = 0; int ergebnis = 0; do { ergebnis += a; i++; } while (i < b); return ergebnis; } public static int nurWhile(int a, int b) { int i = 0; int ergebnis = 0; // Lösung ergebnis += a; i++; while (i < b) { ergebnis += a; i++; } // Ende while Schleife return ergebnis; } // Ende nurWhile
public static int nurFor(int a, int b) {
int ergebnis = a;
// Lösung
for (int i = 1; i < b; i++) {
ergebnis += a;
}
return ergebnis;
} // Ende Methode nurFor
}
- 5889 views
nurWhile() Methode
Ist es in diesem Fall wichtig, vor der while-Schleife zu schreiben:
ergebnis += a;
i++;
Ich sehe da keinen Unterschied in der Ausgabe, wenn ich die beiden Zeilen weglasse, da i in dem Beispiel dann 0 wäre, die while-Schleife somit 4 mal durchlaufen würde und als Ergebnis auch 12 rauskommen würde.
Oder gibt es einen Sonderfall, in dem die beiden Zeilen vor der Schleife von Bedeutung sind?
Im Prinzip ja
Die while Schleife ist eine abweisende Schleife.
Man kann rein mechanisch den Code im dowhile Block vor die While setzen.
Man muss das natürlich nicht tun, wenn man aus den möglichen EIngaben erkennen kann, dass die Anwendung auf jeden Fall in den while Block kommt.
Aber durch diesen zwang…
Aber durch diesen zwang ermöglichen wir die Multiplikation von a * b (b=0) ist das nicht unpraktisch? Habe ich da was übersehen?
Lösung Aufgabe
ich bin der Meinung, dass Sie einen Fehler in der Lösung der Aufgabe gemacht haben.
Sie haben bei nurFor zwei mal ergebnis initialisiert und deklariert
"int ergebnis = 0;"
"int ergebnis = 0;"
jedoch muss es doch eigentlich
"int i = 0;"
und
"int ergebnis = 0;"
sein, oder nicht?
Falls ja, so stimmt Ihre for Schleife ebenfalls nicht, sie würde, dadurch dass wir i bereits deklariert und initialisiert haben,
for( i = 0; i statt
for (int i 0 =; i
lauten.
Sind Sie mit meiner Meinung einverstanden oder habe ich einen Denkfehler?
lG
Richtig.
Danke, wurde korrigiert.
Codetransformation von do-while zu for
Wieso muss ich hier bei der for-Schleife nicht einmal davor ergebnis+=a; implementieren um zu garantieren, dass die Schleife einmal durchläuft, wie bei der do-while Schleife?
Stimmt.
Gut Überlegung. Das ist richtig. Fehler wurde korrigiert.
forSchleife Falsch
In der for-Schleife muss man i = 1 setzen, sonst zählt es einmal mehr durch.
Übrigens sind ihre Captchas echt schwer zu lesen.
Stimmt
Oops. Habe ich korrigiert.