[Progra] Methoden beenden

[Progra] Programmierung
[DSAL] Datenstrukturen und Algorithmen
[SWT] Softwaretechnik
[DB] Datenbanken und Informationssysteme

Methoden beenden

Beitragvon hand-of-fate » 22.12.08 11:45

hi,

wie kann man denn eigentlich sinnvoll eine methode ohne rückgabewert vorzeitig beenden? bzw war dazu irgendetwas in der VL?
thx
Benutzeravatar
hand-of-fate
 
Beiträge: 90
Registriert: 08.04.06 14:55
Wohnort: Korschenbroich
Studiengang: SSE (M.Sc.)
Studiert seit: SS 08
Anwendungsfach: Psycho

Beitragvon SpatzenArsch » 22.12.08 11:49

Wenn es um Java geht, dann kannst du eine void Methode mit return; beenden.
SpatzenArsch
 
Beiträge: 202
Registriert: 15.04.06 12:14

Beitragvon C-Otto » 22.12.08 15:20

Einfach durch Null teilen.
Dr. rer. nat. Carsten Otto
http://verify.rwth-aachen.de/otto/
Benutzeravatar
C-Otto
 
Beiträge: 568
Registriert: 10.08.06 00:20
Wohnort: Schwalbach am Taunus
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon Eichhoernchen » 22.12.08 15:23

Ich glaub er will das ohne exception handling
Eichhoernchen
 
Beiträge: 47
Registriert: 25.11.07 15:32
Wohnort: Hagen/Aachen

Beitragvon C-Otto » 22.12.08 15:28

System.exit(0);
Dr. rer. nat. Carsten Otto
http://verify.rwth-aachen.de/otto/
Benutzeravatar
C-Otto
 
Beiträge: 568
Registriert: 10.08.06 00:20
Wohnort: Schwalbach am Taunus
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon Marco » 22.12.08 18:38

SpatzenArsch hat geschrieben:Wenn es um Java geht, dann kannst du eine void Methode mit return; beenden.

Dabei beschwert sich der Compiler glaube ich wegen "unreachable code" für die Codezeilen nach dem "return;".
Marco
 
Beiträge: 256
Registriert: 02.08.06 23:05
Wohnort: Aachen
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon SpatzenArsch » 22.12.08 18:51

Beispiel?
Folgendes klappt:
Code: Alles auswählen
class test{
        public static void main(String[] args)
        {
            methode(5);
        }

        public static void methode(int i)
        {
            if(i == 5)
            {
                System.out.println("i==5");
                return;
            }
            System.out.println("ohh");
        }
}

Natürlich kann man nicht direkt hinter das return; noch Code schreiben, weil das nunmal auch keinen Sinn macht.
SpatzenArsch
 
Beiträge: 202
Registriert: 15.04.06 12:14

Beitragvon Marco » 22.12.08 20:01

Du hast gerade den Spezialfall erwähnt (zumindest so, wie ich den Original-Post verstanden habe).

SpatzenArsch hat geschrieben:Natürlich kann man nicht direkt hinter das return; noch Code schreiben, weil das nunmal auch keinen Sinn macht.

Exakt, folgendes funktioniert nämlich nicht (kann aber durchaus beim Testen/Entwickeln hilfreich sein):
Code: Alles auswählen
class Test{
        public static void main(String[] args) {
            methode2(5);
        }
       
        public static void methode2(int m) {
           System.out.println("vorher");
           
           return;
           
           System.out.println("nachher");
        }
}

Da hand-of-fate von "vorzeitig beenden" sprach, dachte ich an so etwas.

Grüße
Marco
Marco
 
Beiträge: 256
Registriert: 02.08.06 23:05
Wohnort: Aachen
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon cracki » 22.12.08 20:02

als ich das in meiner kleingruppe vorgefuehrt habe, dachte ich, das waere selbstverstaendlich.

dann fragte mich jemand, ob das denn so ginge... immer wieder faszinierend.
"I suppose if what you said had any merit it would occasion hostility." -- Kenny Tilton
Frische Vorlesungen! -- video.rwth-aachen.de
Benutzeravatar
cracki
 
Beiträge: 537
Registriert: 22.02.08 14:51
Wohnort: Aachen
Studiengang: Informatik (M.Sc.)
Studiert seit: ?
Anwendungsfach: Medizin

Beitragvon O.D. » 22.12.08 23:36

Marco hat geschrieben:
Code: Alles auswählen
        public static void methode2(int m) {
           System.out.println("vorher");
           
           return;
           
           System.out.println("nachher");
        }

Wenn er das nicht mag, weil der letzte Befehl nicht erreichbar ist (bei C gibts ne "Warning" statt nem "Error" - hach ja ... Java ...), wie wärs dann mit:
Code: Alles auswählen
           if (rand()<2.0) return;
           bla();

Habs nicht ausprobiert, aber ich vermute, dass da das Javafiech zu doof zu ist. Ich glaub' die Java-Random Funktion hat in Wirklichkeit einen anderen Prototyp, aber das kann man ja anpassen. Geht ja wohl nur ums testen :)
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon thana » 22.12.08 23:57

O.D. hat geschrieben:
Marco hat geschrieben:
Code: Alles auswählen
        public static void methode2(int m) {
           System.out.println("vorher");
           
           return;
           
           System.out.println("nachher");
        }

Wenn er das nicht mag, weil der letzte Befehl nicht erreichbar ist (bei C gibts ne "Warning" statt nem "Error" - hach ja ... Java ...), wie wärs dann mit:
Code: Alles auswählen
           if (rand()<2.0) return;
           bla();

Habs nicht ausprobiert, aber ich vermute, dass da das Javafiech zu doof zu ist. Ich glaub' die Java-Random Funktion hat in Wirklichkeit einen anderen Prototyp, aber das kann man ja anpassen. Geht ja wohl nur ums testen :)

Ist doch klasse dass Java einem das um die Ohren haut. genau so soll es sein. das *kann* schließlich nur ein fehler sein.

zu deinem beispiel mit rand(): ja im prinzip geht das so.
in wirklichkeit würde das beispielsweise mit
if (System.currentTimeMillis() < 0)
funktionieren
thana
 
Beiträge: 264
Registriert: 18.10.07 17:01

Beitragvon Marco » 23.12.08 02:22

thana hat geschrieben:Ist doch klasse dass Java einem das um die Ohren haut. genau so soll es sein. das *kann* schließlich nur ein fehler sein.

Naja, ist zwar kein guter Stil, aber gewollt muss es kein Fehler sein. Wenn man in einer Methode eine Reihe von Sachen abhandelt und zum Testen nur die ersten paar ausführen will, so könnte man hinter diesen testweise ein "return;" setzen. Ich habe ja nicht behauptet, dass das das Allheilmittel ist, aber es ist (neben Auskommentieren) auch eine Möglichkeit. ;-)
Aber das war wahrscheinlich auch nicht das, was hand-of-fate gemeint hat.
Marco
 
Beiträge: 256
Registriert: 02.08.06 23:05
Wohnort: Aachen
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon Tempest » 23.12.08 04:32

O.D. hat geschrieben:
Code: Alles auswählen
if (rand()<2.0) return;
thana hat geschrieben:
Code: Alles auswählen
if (System.currentTimeMillis() < 0)

Wieso denn so kompliziert?
Es geht in Java auch so :twisted:
Code: Alles auswählen
if (true) return; // Java 1.6.0_11, Eclipse 3.4.1
Benutzeravatar
Tempest
 
Beiträge: 76
Registriert: 13.05.07 22:17
Studiengang: Informatik (M.Sc.)
Studiert seit: SS 07
Anwendungsfach: BWL

Beitragvon O.D. » 23.12.08 10:06

Oh man ...
ich hatte gedacht Java sein ein klein wenig schlauer als das.
I can hear deaf people!
Benutzeravatar
O.D.
 
Beiträge: 745
Registriert: 05.08.06 19:31
Wohnort: Aachen & Minden
Studiengang: Informatik (M.Sc.)
Anwendungsfach: Physik

Beitragvon C-Otto » 23.12.08 10:45

Das ist Absicht, da Programmierer gerne if(true) und while(false) benutzen.
Dr. rer. nat. Carsten Otto
http://verify.rwth-aachen.de/otto/
Benutzeravatar
C-Otto
 
Beiträge: 568
Registriert: 10.08.06 00:20
Wohnort: Schwalbach am Taunus
Studiert seit: fertig
Anwendungsfach: BWL

Nächste

Zurück zu Praktische Informatik