Von A nach B springen

System_Samy

Mitglied
Hallo Leute, ich hab im Internet bereits recherchiert, allerdings finde ich da keine wirkliche Lösung, bzw verstehe diese dann nicht.

Folgendes, ich habe eine If Anweisung, der Benutzer wird aufgefordert einen Zahlenwert zwischen 1 und 3 einzugeben, ne nach Eingabe erhält er dann Informationen, nun soll er aber nachdem er eine Eingabe gemacht hat direkt wieder an den Beginn der If Anweisung gebracht werden, um auch die anderen Zahlen eingeben zu können um auch an diese Informationen zu gelangen, in Code Form:


int = auswahl;

System.out.println("1: Informationen über technische Daten");
System.out.println("2: Informationen über wirtschaftliche Daten");

(hier beginnt PUNKT X)
System.out.println("Treffen Sie ihre Auswahl und bestätigen Sie mit der Entertaste");
auswahl = readInteger(); //IOTools

if(auswahl == 1) {
System.out.println("Text mit Informationen über technische Daten");
Springe zurück zu Punkt X
}

if(auswahl == 2) {
System.out.println("Text mit Informationen über wirtschaftliche Daten");
Springe zurück zu Punkt X
}



//

Die Frage ist jetzt, wie schreibe ich das rot markierte in Codeform? Also wie setze ich das um?
 
Zuletzt bearbeitet:
Das ganze nennt sich goto. In Java gibt es das aber nicht, weil es worst Practice ist. Gotos verursachen sogenannten "Spagetticode" und machen viel mehr Kaputt als sie helfen (wie man erst diese Woche am fatalen gotofail-Bug von Apple gesehn hat).
Spalte deinen Code in Methoden und alles wird gut.
 
Das Konzept, dass sich hinter der Fragestellung verbirgt, nennt sich REPL.
Read Evaluate Print Loop.

Java:
private static boolean isRunning = true;

public static void main(String[] args) {
  while(isRunning) {
    int selection = read();
    String result = evaluate(i);
    print(result);
  }
}

public static int read() {
  System.out.println("1: Informationen über technische Daten");
  System.out.println("2: Informationen über wirtschaftliche Daten");
  System.out.println("Treffen Sie ihre Auswahl und bestätigen Sie mit der Entertaste");
  return readInteger(); 
}

public static String evaluate(int i) {
  switch(i) {
    case 1: return "Technische Daten bla bla";
    case 2: return "Wirtschaftliche Daten bla bla";
    default: isRunning = false;
                return "Bye, and have a nice day";
  }
}

public static void print(String text) {
  System.out.println(text);
}
 
Das Konzept, dass sich hinter der Fragestellung verbirgt, nennt sich REPL.
Read Evaluate Print Loop.

Java:
private static boolean isRunning = true;

public static void main(String[] args) {
  while(isRunning) {
    int selection = read();
    String result = evaluate(i);
    print(result);
  }
}

public static int read() {
  System.out.println("1: Informationen über technische Daten");
  System.out.println("2: Informationen über wirtschaftliche Daten");
  System.out.println("Treffen Sie ihre Auswahl und bestätigen Sie mit der Entertaste");
  return readInteger(); 
}

public static String evaluate(int i) {
  switch(i) {
    case 1: return "Technische Daten bla bla";
    case 2: return "Wirtschaftliche Daten bla bla";
    default: isRunning = false;
                return "Bye, and have a nice day";
  }
}

public static void print(String text) {
  System.out.println(text);
}

Das ist ja vorgekaut (und das nichtmal gut), das bringt dem TO nicht viel.

@TO:
Ein Beispiel, wie gotos funktionieren und wie man es beser machen kann:
Folgender code wäre mit Schleife:
Java:
int i = 0;
while (i < 10)
{
    i++;
    System.out.println(i);
}
Folgender mit gotos:
Java:
int i = 0;
loopStart:
i++;
System.out.println(i);
if (i < 10)
{
    goto loopStart;
}

Du siehst auf anhieb: beim while-konstrukt ist sofort ersichtlich, welcher code wiederholt wird und wie oft. Bei GOTOs hast du erstens bei längerem Code seeeehr viele Sprunmarken und zweitens muss man immer genau hinschauen um rauszufinden, welcher code wann und wie ausgeführt wird.


Um auf dein Problem zurückzukommen:
Java:
public static void main(String[] args)
{
    print();
    int input;
    while ((input = readInteger()) != 3)
    {
        if (input == 1)
        {
            // text 1 ausgeben
        }
        else if (input == 2)
        {
            // text 2 ausgeben
        }
        else
        {
            // input nicht erkannt
        }
    }
}
public void print()
{
    System.out.println("1: Text A\n2:Text B\n3: Exit");
}
 
Zuletzt bearbeitet:
Danke Tobse, bei deiner Lösung werde ich allerdings sofort wieder an den Beginn meiner Schleife geworfen, kann ich dieses zurückwerfen auch erst durch ein Tastendruck aktivieren?
 

Neue Themen


Zurück
Oben