3. Codetransformation switch-case

Submitted by javafrage on Sun, 10/14/2012 - 10:34

Wandeln 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
}

 

Anonymous (not verified)

Tue, 12/18/2012 - 13:46

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?

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 ermöglichen wir die Multiplikation von a * b (b=0) ist das nicht unpraktisch? Habe ich da was übersehen?

Anonymous (not verified)

Tue, 12/16/2014 - 18:46

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

Anonymous (not verified)

Sun, 12/20/2015 - 16:07

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?

Anonymous (not verified)

Fri, 12/22/2017 - 10:21

In der for-Schleife muss man i = 1 setzen, sonst zählt es einmal mehr durch.

Übrigens sind ihre Captchas echt schwer zu lesen.