Übungen

Daniel S.
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 25. Sep 2007 12:28
Wohnort: Mörfelden

Re: Übungen

Beitrag von Daniel S. »

leyna.sadamori hat geschrieben:Noch ne Frage zu Java: Welchen Vorteil hat es, dieses Konstrukt der while-Schleife vorzuziehen:

Code: Alles auswählen

for (int i = 0; i < opcodes.length; i++) {
    if (tokens[0].equals(opcodes[i])) {
        op = i; // Befehl gefunden
        break;
    }
}
Ich vermute mal du meinst im Vergleich zu dieser Schreibweise:

Code: Alles auswählen

int i = 0;
while(i < opcodes.length) {
    if (tokens[0].equals(opcodes[i])) {
        op = i; // Befehl gefunden
        break;
    }
    i++;
}
Oder?

Beide Schreibweisen sind erstmal äquivalent, deshalb würde man auch mit nur einer auskommen, in verschiedenen Situationen könnte eine Schreibweise aber durchaus Vorteile gegenüber der anderen haben, ich sag dir hier einfach mal die wesentlichen Unterschiede, da kannst du dir dann überlegen, wann for und wann while besser ist:
  • Bei while ist die Zähler-Variable i auch hinter der Schleife noch gültig.
  • Bei der for Schleife ist i nur innerhalb der Schleife gültig.
  • Bei for sieht man schon in der ersten Zeile, wie lange die Schleife im normalfall läuft.
  • Bei while muss man erst die Initialisierung von i suchen und die Änderung von i am Ende, um zu sehen wie lang die Schleife läuft.
  • Die for-Schreibweise ist 2 Zeilen kürzer.
  • Die Zeile mit der for-Schleife ist deutlich länger.
Edit: Wegen der neuen Seite noch die for-Schleife zum Vergleich eingefügt.
Mit freundlichen Grüßen
Daniel

leyna.sadamori
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 29. Okt 2007 16:52

Re: Übungen

Beitrag von leyna.sadamori »

Oh, ich habe gerade gemerkt, dass ich auf was anderes hinaus wollte, was aber doch länger ist. Ich dachte daran, eine while-Schleife zu nehmen und eine Abbruchbedingung mithilfe eines boolean zu realisieren. Die hätte allerdings zusätzlich Speicher benötigt, insofern ist break eine ziemlich nützliche Sache.
Spaß ist, was ihr draus macht!

Benutzeravatar
unschuldslamm
Kernelcompilierer
Kernelcompilierer
Beiträge: 422
Registriert: 28. Okt 2004 09:24

Re: Übungen

Beitrag von unschuldslamm »

leyna.sadamori hat geschrieben: insofern ist break eine ziemlich nützliche Sache.
break ist aber eine ziemlich dreckige Sache... (und ich werde mich beim Bepunktungsshea dafür einsetzen, das soetwas "Punkte" kostet (also so nen halben Punkt ;)...) )

mfg
Maybe in Ohio, but not in America!

Jonas Bargon
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 31. Dez 2007 15:25

Re: Übungen

Beitrag von Jonas Bargon »

ich hab dann ne frage weil ich im propro nen
switch(...)
case...:
break;
case...:
break;

konstruckt verwende ob ich das dar oder es besser in eine if serie verwandle?

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Übungen

Beitrag von Owyn »

unschuldslamm hat geschrieben:break ist aber eine ziemlich dreckige Sache... (und ich werde mich beim Bepunktungsshea dafür einsetzen, das soetwas "Punkte" kostet (also so nen halben Punkt ;)...) )
Da die for-Schleife aus der Projekt-Vorgabe zitiert war, gibt es da an dieser Stelle garantiert keinen Abzug für.
Ich finde in einigen Fällen break und continue sehr praktisch, wenn dadurch der Code nicht zum Spahetti-Code wird und sofort klar ist, wohin das "break" springt.
Ansonsten ist es natürlich gut, dass "goto" und ähnliche Konstrukte verpönt sind.
Jonas Bargon hat geschrieben:ich hab dann ne frage weil ich im propro nen switch[...]konstruckt verwende ob ich das dar oder es besser in eine if serie verwandle?
switch ist absolut in Ordnung.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Jonas Bargon
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 31. Dez 2007 15:25

Re: Übungen

Beitrag von Jonas Bargon »

ok danke erspart einem tiparbeit

Daniel S.
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 25. Sep 2007 12:28
Wohnort: Mörfelden

Re: Übungen

Beitrag von Daniel S. »

leyna.sadamori hat geschrieben:Oh, ich habe gerade gemerkt, dass ich auf was anderes hinaus wollte, was aber doch länger ist. Ich dachte daran, eine while-Schleife zu nehmen und eine Abbruchbedingung mithilfe eines boolean zu realisieren. Die hätte allerdings zusätzlich Speicher benötigt, insofern ist break eine ziemlich nützliche Sache.
Also so in der Art:

Code: Alles auswählen

boolean instructionFound = false;
for (int i = 0; !instructionFound && i < opcodes.length; i++) {
    if (tokens[0].equals(opcodes[i])){
        op = i;
        instructionFound = true;
    }
}
(irgendwie fehlt mir in diesem Informatiker-Forum das Syntaxhighlighting)

Das hat auch ein paar Vorteile:
  • meine Theorie bestätigt sich, dass gut gewählte Variablennamen die Kommentare weitestgehend überflüssig machen (darauf lege ich während der Korrektur viel Wert)
  • das "schmutzige" break wird vermieden (in switches sind breaks selbstverständlich OK)
  • ich habe mir den Code noch nicht angesehen, aber evtl. folgt irgendwo danach noch eine Abfrage in der Art if(op != -1) o.ä. da könnte man dann if(instructionFound) verwenden, die zusätzliche Variable wäre dann durchaus sinnvoll
Mit freundlichen Grüßen
Daniel

leyna.sadamori
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 29. Okt 2007 16:52

Re: Übungen

Beitrag von leyna.sadamori »

Code: Alles auswählen

catch (Exception e) {
            System.out.println("Datei kann nicht gefunden oder gelesen werden!");
            System.exit(1);
Was kann man alles an die zweite Stelle in der Klammer nach catch schreiben? Ich habe in einigen Bsp. aus dem Internet immer ein "e" gesehen, aber ich konnte den Erklärungen nichts abgewinnen. Der erste Teil muss eine Klasse sein, welches von der Klasse Throwable erbt. Aber das "e" verstehe ich nicht ganz...
Spaß ist, was ihr draus macht!

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Übungen

Beitrag von Owyn »

leyna.sadamori hat geschrieben:catch (Exception e)
Was kann man alles an die zweite Stelle in der Klammer nach catch schreiben? Ich habe in einigen Bsp. aus dem Internet immer ein "e" gesehen, aber ich konnte den Erklärungen nichts abgewinnen. Der erste Teil muss eine Klasse sein, welches von der Klasse Throwable erbt. Aber das "e" verstehe ich nicht ganz...
Das "e" könnte auch "peter" heißen, es ist einfach der Name, der dem Exception-Objekt für diesen catch-Block gegeben wird.
Eine Exception hat immer eine Methode "String getMessage()", die z.B. eine Fehlermeldung bzw. Beschreibung des aufgetretenen Fehlers enthalten kann.

Und um diese Methode aufzurufen, muss man natürlich auf das Objekt zugreifen können:

Code: Alles auswählen

catch (Exception fehler) {
    System.out.println("Fehler: " + fehler.getMessage());
    System.exit(1);
}
In der Java-API steht unter "Exception" und "Throwable" mehr.
Sie müssen die Exception-Behandlung für die erfolgreiche Bearbeitung des Programmierprojekts nicht verstehen - natürlich schön, wenn Sie das von sich aus wollen.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

leyna.sadamori
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 29. Okt 2007 16:52

Re: Übungen

Beitrag von leyna.sadamori »

Ich hab grad gesehen, dass der Debugger noch gar nicht in den Übungen oder der Vorlesung angesprochen wurde. Ich find den ziemlich nützlich, vielleicht könnte man den mal in einer Übung erwähnen, oder wenns zu knapp is in der Vorlesung. Wobei auch verständlich ist, wenn die Vorlesung da kein Platz mehr für hat.
Spaß ist, was ihr draus macht!

Antworten

Zurück zu „Archiv“