Skip to content

Latest commit

 

History

History
259 lines (213 loc) · 6.37 KB

Kap.4.adoc

File metadata and controls

259 lines (213 loc) · 6.37 KB

Frage

Wie sieht die Syntax einer If-Abfrage aus?

Antwort
if (Bedingung) {
  Anweisungen
}

Frage

Wie sähe der Ausdruck x = x < 0 ? -x : x mit einer normalen If-Abfrage aus?

Antwort
if (x < 0) { x = -x; }

Frage

Schreiben sie eine If-Abfrage, die abhängig vom Monat in der Integer-Variablen month (Der Januar entspricht der 1) die Jahreszeit ausgibt. (3-5: Frühling, 6-8: Sommer, 9-11: Herbst, 12-2: Winter)

Antwort
if (month >= 3 && month <= 5) {
  System.out.println("Frühling");
} else if (month >= 6 && month <= 8) {
  System.out.println("Sommer");
} else if (month >= 9 && month <= 11) {
  System.out.println("Herbst");
} else {
  System.out.println("Winter");
}

Frage

Schreiben sie eine Switch-Verzweigung, die abhängig vom Monat in der Integer-Variablen month (Der Januar entspricht der 1) die Jahreszeit ausgibt. (3-5: Frühling, 6-8: Sommer, 9-11: Herbst, 12-2: Winter)

Antwort
switch(month) {
  case 3: case 4: case 5:
    System.out.println("Frühling");
    break;
  case 6: case 7: case 8:
    System.out.println("Sommer");
    break;
  case 9: case 10: case 11:
    System.out.println("Herbst");
    break;
  default:
    System.out.println("Winter");
}

Frage

Was sind die drei Teile des Kopfes einer For-Schleife?

Antwort
  1. Initialisierung

  2. Fortsetzungsbedingung

  3. Schrittanweisung

Frage

Ist die folgende Schleife syntaktisch korrekt? Falls ja, was wird auf der Konsole ausgegeben?

int i,j;
for(i = 0, j = 0; i+j < 10; j++, i++) {
  System.out.println(i + " " + j);
}
Antwort

Ja, die Schleife ist korrekt. Die Ausgabe lautet wie folgt:

0 0
1 1
2 2
3 3
4 4

Frage

In Anlehnung an die letzte Frage: Können Sie mit einem einzigen Schleifenkopf eine Schleife schreiben, die die x- und y-Koordinaten aller Pixel eines Bildes mit 8x10 Pixeln durchläuft?

Antwort
int x,y;
for(x = 0, y = 0; x < 8 && y < 10; x = (x + 1) % 8, y = x == 0 ? y + 1 : y) {
  System.out.println(x + " " + y);
}

Frage

Ist die folgende Variante der Schleife auf S. 108 auch korrekt?

int i;
for(int i=0; i < 10; i++) {
  machEtwas(i);
}
Antwort

Nein, diese Schleife ist nicht korrekt. Die Variable i im Kopf der for-Schleife darf nicht namensgleich mit einer lokalen Variablen im außeren Umfeld der for-Schleife sein.

Frage

Ist for(int i; i < 10; i++) { …​ } korrekt?

Antwort

Der Code ist nicht korrekt. Die Variable i wird nicht initialisiert.

Frage

Was ist bei Schleifen zu beachten, deren Zählvariable vom Typ float oder double ist?

Antwort

Die Fortsetzungsbedingung sollte kein exakter Vergleich sein, da dieser eventuell durch Rundungsfehler nie zutrifft. Generell sind in den meisten Fällen Integer-Schleifenvariablen vorzuziehen.

Frage

Kann der Zähler einer for-Schleife auch den Typ char haben?

Antwort

Ja, da ein char immer auch einem Zahlwert entspricht (entsprechend der UTF-16-Kodierung).

Frage

Ein Student und eine Studentin schreiben den folgenden for-Kopf, um die Summe der Zahlen von 1 bis 50 zu berechnen: for(i = 1, sum = 0; i ⇐ 50; sum = i+); Was sagt Ihnen Ihr Programmierverstand?

(Übrigens: Der Kopf der Schleife ist syntaktisch korrekt, da liegt nicht das Problem!)

Antwort

Die Variable sum wird innerhalb der Schleife definiert, kann aber außerhalb der Schleife nicht mehr ausgelesen werden.

Frage

Schreiben Sie die folgende For-each-Schleife mit einer normalen for-Schleife: for(int x: ar) { System.out.println(x); }

Antwort
for(int i = 0; i < ar.length; i++) {
  System.out.println(ar[i]);
}

Frage

Was ist der Unterschied zwischen einer while-Schleife und einer do-while-Schleife? In welchem Fall ist die eine sinnvoller, in welchem die andere?

Antwort

Die do-while-Schleife wird immer mindestens einmal durchlaufen. Wenn man z.B. einen Verbindungsversuch über das Netzwerk im Fehlerfall wiederholen möchte, wäre eine do-while-Schleife passender, da der Verbindungsversuch ja auf jeden Fall mindestens einmal stattfinden sollte.

Frage

Man kann jede for-Schleife in eine while- bzw. do/while-Schleife umwandeln. Stimmt das?

Antwort

Ja.

Frage

Beschreiben Sie die Ausführung einer for-Schleife:

for(init ; cond ; change) { body ; } Welche Anteile werden in welcher Reihenfolge wiederholt ausgeführt?

Antwort
  1. init

  2. falls cond, dann body

  3. change

  4. gehe zu 2.

Frage

Herrn Kofler kräuseln sich die Fußnägel, wenn Sie Fließkommazahlen im Kopf einer for-Schleife verwenden. Warum?

Antwort

Wegen der Rundungsfehler. Mit etwas Pech ist die Schleife so formuliert, dass sich die Rundungsfehler summieren, also immer größer werden. (Mit Glück halten sich positive und negative Fehler in etwas die Waage, aber Programmieren sollte kein Glücksspiel sein …​)

Frage

for(int i = 0; i < 100; i++) { if (i % 2 == 0) System.out.println(i); }

Vervollständigen Sie den folgenden Code so, dass er das gleiche tut wie der oben stehende Code:

int i = 0;
while(true) {
 // hier bitte Code einfügen
 System.out.println(i);
 // hier bitte Code einfügen
}

Sie dürfen bereits bestehende Zeilen nicht mehr ändern, nur welche hinzufügen.

Antwort
int i = 0;
while(true) {
 if(i >= 100) break;
 if(i % 2 != 0) continue;
 System.out.println(i);
 i++;
}

Frage

Der Kopf for(int i = 1; ; i++) sei gegeben, Sie dürfen ihn nicht verändern. Allerdings darf die Schleife nur für i bis 50 laufen. Retten Sie das im Rumpf!

Antwort
for(int i = 1; ; i++) {
  if (i > 50) break;
}