Eine Art goto Befehl?

Hi Leute,

ich bin noch am Anfang vom Javapogrammieren, und habe eine Frage die woll zum Grundwissen von einem Profi gehört.
Und zwar suche ich einen Befehl in in einer if oder else in else steht und zu einem Punkt am anfang springt. Ich habe es mit allem mögliche versucht. eigentlich müsste es doch mit return oder mit continue gehn oder?
Von anderen Sprachen kenne ich den GOTO befehl, gibt es den auch?

Ich bedanke mich schon mal im vorraus,

mit freundlichen Grüßen Frank

Von anderen Sprachen kenne ich den GOTO befehl, gibt es den
auch?

GOTO ist das pure Böse, wenn man Edsger Dijkstra einem ziemlich bedeutenden Informatiker glauben darf.
Und genau weil GOTO ein so böses Konstrukt ist, benutzt man es in objektorientierten Programmiersprachen nicht. Schau Dir mal an was eine Methode und eine Methodenaufruf sind und ließ das erste Tutorial auf der Java Hompage (A first cup of JAVA). Du mußt Dich in einer objektorientierten Sprache von prozeduralen Konzepten lösen.

Danke, schön wäre es wenn du mir meine Frage direkter beanwortet hast.

Wär toll wenn jemand noch eine Antwort bezüglich meiner Frage zu continue oder return beantworten würde!

mfg Frank

Danke, schön wäre es wenn du mir meine Frage direkter
beanwortet hast.

Du weißt aber schon was ne Methode in Java ist, oder? Vielleicht macht folgendes Beispiel klar, warum ein GOTO Konzept in Java keinen Sinn macht:

static class Calc {
 public static void main (String [] arrrgh\_i\_m\_a\_pirate) {
 int a = 4;
 int b = 6;
 int c = addition(a, b);
 System.out.println("result:" + c);
 }

 static int addition(int x, int y) {
 int result = x + y;
 return result;
 }
}

Ja!

Nehmen wir an das ich eine Login schreiben will wenn Name und PW übereinstimmen geht es weiter, geht das einloggen schief also PW ist falsch dann sollte man die Eingabe doch wiederholen können.

Soll ich auch ein Pogramm zum Beisspiel posten?

Nehmen wir an das ich eine Login schreiben will wenn Name und
PW übereinstimmen geht es weiter, geht das einloggen schief
also PW ist falsch dann sollte man die Eingabe doch
wiederholen können.

void doLogin(String login, Sting password) {
 if (this.isCorrect()) {
 this.proceed();
 } else {
 this.printError()
 }
}

Aber ohne Dich kränken zu wollen: Solange Du nicht weißt was eine Methode, ein Objekt, eine Klasse, eine Instanz sind, brauchst Du Dir um sowas einen Login keine Gedanken machen. Lies! Lies, was das grundlegende Konzept der Sprache ist, die Du da benutzen willst…

hallo

das wort „goto“ ist in java reserviert - es darf nicht im code verwendet werden. intern benötigt es java aber sehr wohl - zum auflösen der schleifen. de fakto macht der precompiler aus schleifen ein konstrukt aus goto’s und labels. allerdings macht das der precompiler nach fix vordefinierten regeln und den generierten code sieht man normalerweise auch nicht.

im eigentlichen code gibt es nur extrem wenige fälle, wo ein goto sinnvoll ist - also den code lesbarer macht. in den allermeisten fällen erzeugt man damit nur spagetti-code, der unlesbar und unwartbar wird. die fehleranfälligkeit solches codes steigt mit jeder programmänderung exponential an.

java bietet normalerweise sehr viele möglichkeiten, den code ohne gotos zu strukturieren. beispiel: du hast eine recht komplexe prüfregel, aufgrund der der weitere programmablauf entschieden werden kann. wenn du diese prüfregel in eine eigene methode packst und der methode einen vernünftigen namen gibst, hast du a) die lesbarkeit des programms erhöht, b) die wartbarkeit erhöht und c) keine notwendigkeit für das goto, da du ja nun in einem simplen if-konstrukt bist. für wirklich komplexe abfragen/verzweigungsmöglichkeiten bieten sich enums und das select-statement an - auch die sind bei weitem lesbarer als gotos.

mit grausen erinnere ich mich an meine anfänge mit meinem atari 800xl. der hatte keine schleifenbefehle, kein „else“ nach dem if und keine prozeduren/funktionen. da musste man ALLES mit goto lösen. da es nichtmal labels gab, war der programmcode praktisch unwartbar. änderungen an bestehenden programmen endeten meist in einer langwierigen fehlersuche.

wenn man unbedingt ein dem goto entsprechendes konstrukt haben will, kann man ja mit verschachtelten schleifen, labels und continue herumexperimentieren. allerdings ist sowas nur für ein proof-of-concept oder als abschreckendes beispiel geeignet.

gewöhn dich also daran, das goto-konzept über bord zu werfen. es braucht niemand und hilft niemanden.

lg
erwin

Interresant das du fast alles kopiert hast außer die Antwort auf die Frage ob ich weis was eine Klasse ist.

Egal ich will nicht irgendwie sauer klingen aber…

Ja ich weis was eine Klasse/class ist ich weis was eine Methode ist, …

Also ich habe jetzt das Pogramm zum veranschaulichen geschrieben:

import java.util.Scanner;

public class Beisspiell {

// Anfang Methoden

public static void main(String [] args) {

Scanner myScanner = new Scanner(System.in);
String Username;
String pw;

System.out.print(„Benutzernamen:“);
Username = myScanner.nextLine();

System.out.print(„Passwort:“);
pw = myScanner.nextLine();

if (Username.equals(„Frank“)&&pw.equals(„Beisspiel“)) {
System.out.println(„Eingeloggt“);

} else {
System.out.println(„Login fehlgeschlagen“);

// Und von dem Punkt will man zum Anfang springen
}
}
// Ende Methoden

}

Ich will doch bitte einfach nur einen Befehl, also was muss ich bei dem Komentar „Und von dem … springen“ für einen Befehl einfügen um vor die Eingabe von Benutzername und Passwort zu gelangen?

Sorry für den doppelpost aber ich wollte es noch etwas verständlicher machen.
Von dem Angegebenen Punkt aus soll die Methode, also da wo das Kommentar Anfang Methode steht, wiederholt werden. Also zu dem Punkt gesprungen werden.

Ich hatte es mit return und continue versucht aber das funktioniert nicht oder gibt es eine Möglichkeit?

Ich will doch bitte einfach nur einen Befehl, also was muss
ich bei dem Komentar „Und von dem … springen“ für einen
Befehl einfügen um vor die Eingabe von Benutzername und
Passwort zu gelangen?

Endweder rufst Du die Methode dann rekursiv auf, oder aus einer anderen Methode mit einer while Schleife oder soetwas. Dazu wäre es dann gut wenn Deine Login Methode irgendwas zurückgibt, ob die authentifizierung funktioniert hat oder nicht. Sprungmarken oder GOTO Kommandos innerhalb von Methoden gibt es wie gesagt nicht. Kapsel Deinen Code vernüftig, sodaß Deine Methoden dir die Werte liefern, die Du brauchst.

Ok, ich versuch’s jetzt mal etwas konstruktiver:

Dein Ansatz mit continue bzw break war schon richtig. Unter http://java.sun.com/docs/books/tutorial/java/nutsand… gibt es dazu noch ausführlicher was.

Es wäre jetzt eigentlich gut, wenn Du mal einen Codeschnippsel postest, damit die Leute hier auch etwas von Deiner Logik sehen. Kann ja sein, dass bis jetzt alle aneinander vorbeigeredet haben. Ich vermute mal, Du hast so etwas getippt:

while(!irgendwas.isTrue()) {
 if(!myPasswordz.equals(hazPasswordz()) {
 continue;
 } else {
 break;
 }
}

Man steinige mich jetzt nicht gleich, das war schnell hingetippt, um den sunyfrank zu einer Antwort zu provozieren. :wink:

Noch einmal sry wegen dem doppelposten ;D

Ich such leider immer noch nach einem Befehl der innerhalb einer Klasse zu einem Punkt in der Klasse geht, oder die Klasse wieder holt.

Ich bitte um Hilfe, danke im Vorraus,

mfg Frank

Ich such leider immer noch nach einem Befehl der innerhalb
einer Klasse zu einem Punkt in der Klasse geht, oder die
Klasse wieder holt.

ES GIBT SOWAS NICHT! Endweder kapselst Du Deinen Krempel in einer Methode, oder benutzt eine Programmiersprache, die Sprungmarken unterstzützt. Prozedurale Aufrufe in der Form gibt es nicht in JAVA. LIES DAS TUTORIAL! Mach Dir klar, wie man eine objektorientierte Programmiersprache benutzt oder mach den Krempel in COBOL.
Sorry, aber aber ich antworte Dir gerade zum dritten Mal das gleiche.

Du meinst vermutlich dies:

public class Goto {

 public static void main( String[] args ) {
 äußereSchleife:
 for ( int außen = 0; außen 0; --mitte ) {
 if ( mitte == 3 )
 continue äußereSchleife;
 for ( int innen = 0; innen 
Habe ich in meine 10 Jahren mit Java aber noch nie in der Praxis gebraucht. Meist kann man das auch eleganter lösen. So tiefe Schachtelungen gehören eh in eigenen Funktionen.

Grüße
... Michael

Hi,

danke, auch wenn ich nicht direkt von dir gelernt habe ich habe es hin gekriegt!

THX

danke, auch wenn ich nicht direkt von dir gelernt habe ich
habe es hin gekriegt!

Deine Entscheidung. Wenn Du Spagetticode produzieren willst, oder wilde Verschchtelungen, wie sie in einem oben genannten Beispiel entstehen, bitte, aber das wird Di in der Zukunft immer wieder auf die Füße fallen. Du willst der Sprache ein Dir bekanntes Konzept aufzwingen, was zu einem gewissen Teil vielleicht funktionert, aber eben nur zu einem gewissen Teil. Freude hast Du daran auf die Dauer nicht, aber das ist nicht mein Problem.

hi
Also zu deiner Frage wegen dem Login.

Da is ne Schleife einfacher.

In der schleife gibst du was ein am ende kontrolliert die schleife ob das ergebnis übereinstimmt wenn ja geht sie aus der schleife raus, wenn nicht wieder holt sich (Bei einer konsole kommt das geschriebene einfach nochmal.

So würde es in c++ aussehen:
str Name =„Sunny“;
str PW =„Sunny“;
str PWein;
str Nameein;
int über;
.
.
.
Do

printf(„Geben sie ihren Namen ein!! (backslash)n“);
scanf("%s",&Nameein);
printf(„Geben sie das pw ein!! (backslash)n“);
scanf("%s",&amp:stuck_out_tongue_winking_eye:Wein);

übername=strcmp(Name,Nameein);
überPW=strcmp(PW,PWein);
while (übername && überPW = 0 )

hff stimmmt das so meine letzte c++ programmierung liegt schon etwas zurück.

kurze erklärung:
ich glaub nur strcmp:
vergleicht die beiden strings miteinander wenn sie richtig sind geben die beiden über eine null sind beide nun endet die schleife wenn nicht, wiederholt sich die Schleife.

Da c++ Java ein bisschen ähnelt hab ich es mal so versucht.Nur in Java da kann ich no net helfen da bin ich selbst anfänger :smiley:

hff konnt ich helfen.

MfG Linden