zu einer Zeile zürück springen

joni

Mitglied
Hallo,

wie kann man zu einem Punkt im Programm zurück gehen, ich habe zum Beispiel eine else andweisung und wenn der user eine falsche Eingabe gemacht hat kommt folgendes:

....
else
Java:
System.out.println("Du hast '" + eingabe + "' geschrieben. Hast du dich vertippt? Versuch es nochmal!");
				
			System.exit(0);
und dann soll er zurück zum Anfang gehen und den ablauf von vorne starten.

ich hab was von try-catch gelesen aber nicht verstanden.

und eben anstatt dem System.exit(0); will ich dsa er wieder von oben beginnt mit der benutzereingabe.

Vielen Dank schonmal.

Grüsse
 

Sempah

Bekanntes Mitglied
sowas wie goto benutzt man nicht mehr.
Pack es in eine while-Schleife, die solange läuft bis die korrekte Eingabe getätigt wurde.
 

joni

Mitglied
Danke schonmal für die Antwort, ich habs mal versucht aber komm nicht ganz klar:

also hier mal mein Code:

Java:
//**//Input Stein, Schere Papier oder Beenden//**//
		String eingabe = StdInput.readString("Ihre Wahl von Schere, Stein, Papier oder Beenden: ");
		
		//**//Eingabe Lesen und gegebene Aktion ausführen//**//Beenden
		if (eingabe.equalsIgnoreCase("Beenden")){
			System.out.println("      Siege des Computers: " + winspc );
					System.out.println("      Siege des Spielers:  " + winsme );
							System.out.println("Danke für das Spiel!");
			System.exit(0);
    	}
		//**//Eingabe Lesen und gegebene Aktion ausführen//**//Schere
            else if(eingabe.equalsIgnoreCase("Schere")){
    			System.out.println("Du hast " + eingabe + " gezogen und ich zog ..." + zufall );
    			System.out.println("*****" + " hat gewonnen*****");
            } 
		//**//Eingabe Lesen und gegebene Aktion ausführen//**//Stein
            else if(eingabe.equalsIgnoreCase("Stein")){
    			System.out.println("Du hast " + eingabe + " gezogen und ich zog ..." ); 
    			System.out.println("*****" + " hat gewonnen*****");
            }
		//**//Eingabe Lesen und gegebene Aktion ausführen//**//Papier
            else if(eingabe.equalsIgnoreCase("Papier")){
    			System.out.println("Du hast " + eingabe + " gezogen und ich zog ..." );
    			System.out.println("*****" + " hat gewonnen*****");
    	    }
            
		//**//Schreibfehler Notification//**//
    				else	System.out.println("Du hast '" + eingabe + "' geschrieben. Hast du dich vertippt? Versuch es nochmal!");
				
			System.exit(0);

und ich habe versucht es mit der while schleife zu machen
Java:
while (eingabe != "Beenden", "Schere", "Stein", "Papier"){
			xxxxx	
				
			}

aber irgendwie komm ich da nicht hin das es es nimmt weil das != geht nicht, wie kann ich das lösen?

und bei xxxxx was muss ich da rein schreiben dass er wieder von oben beginnt ?

in der doku steht da immer nur System.out.prinln(x); aber dass will ich ja nicht

sorry bin echt newb
 

Michael...

Top Contributor
Strings vergleicht man mit equals(...), ferner kann da nicht einfach auflisten, sondern muss einzelne Ausdrücke erstellen, die man logischen verknüpft:
Java:
while (!eingabe.equals("Beenden") && !eingabe.equals("Schere") ...)
 

nrg

Top Contributor
Musst aber imho in der while-Bedingung keine Abfrage auf den Input machen (machst du doch schon im while-Body). Mach einfach eine Dauerschleife und verlasse sie, wenn "Beenden" eingegeben wird.
Java:
		while (true) {
			String eingabe = StdInput.readString("Ihre Wahl von Schere, Stein, Papier oder Beenden: ");
			if (eingabe.equalsIgnoreCase("Beenden")){
				//do sth
				break;
			}
			// else ifs
			else {
				System.out.println("Falsche Eingabe");
			}
		}

zur besseren Lesbarkeit könntest auch einen boolean erstellen. z.b. boolean exit = false; while(!exit) {... und diesen dann eben auf true setzen, wenn das Programm beendet werden soll.
 

joni

Mitglied
Danke, das hat mir schonmal viel weiter geholfen. Nun aber bin ich immer noch nicht ganz dort wo ich will, ich habe es geschafft den loop zu machen und einfach eine "eingabe2" erstellt die das ganze nochmals abfragt aber kann mann das nicht ähnlich wie in einer batch datei machen wo man einfach sagt spring zurück zu punkt x

:anfang
blabla

if errorlevel 1 goto anfang

kann man das nicht in ähnlichem style umsetzten?

sorry für die vielen fragen :p
 

faetzminator

Gesperrter Benutzer
Gotos sind böse und verursachen Spagetticode. Man könnte grundsätzlich von überall nach überall springen. Das soll man aber nicht. Solcher Code ist schwer zu verstehen und zu debuggen.
 

nrg

Top Contributor
Ich kenn StdInput nicht, deshalb hab ich das jetzt mal mit einen normalen BufferedReader gemacht um dir das kurz tu veranschaulichen. Versteh halt grad echt nicht, wo noch dein Problem ist, deshalb poste ich jetzt mal ein mögliches Grundgerüst:

Java:
import java.io.*;
public class Test {
	public static void main(String[] args) throws IOException  {
		BufferedReader bisr = new BufferedReader ( new InputStreamReader (System.in));
    	System.out.println("Type help for Help\n");
        while (true) {
        	System.out.print("Papier Stein Schere> ");
            String eingabe = bisr.readLine();
            if (eingabe.equalsIgnoreCase("Beenden")){
                //DO SOMETHING
                break;
            } else if (eingabe.equalsIgnoreCase("help")) {
            	printHelp();
            	//MORE ELSE IFS HERE
            } else {
                System.out.println("Falsche Eingabe. Bitte wiederholen!\n");
            }
        }
        bisr.close();
	}
	public static void printHelp() {
    	System.out.println(	"papier\t-\tWählt das Papier für das nächste Spiel\n" +
							"stein\t-\tWählt den Stein für das nächste Spiel\n" +
							"schere\t-\tWählt die Schere für das nächste Spiel\n"	+	
							"help\t-\tGibt die Hilfe aus\n");
	}
}
du kannst natürlich weiterhin deine Eingabe benutzen aber ich konnte es jetzt anders nicht testen.

edit: printHelp() kannst du ja noch selbst anpassen. Mir ist grad aufgefallen, dass ich beenden vergessen habe. Möglich wäre vllt auch noch score (gibt den aktuellen Punktestand aus). Da kannst du deiner Fantasie ja freien Lauf lassen ;). wie gesagt, sollte ja nur ein Grundgerüst sein (und für mein Empfinden ist es dafür eh schon zuviel ;))
 
Zuletzt bearbeitet:

stockhausen

Mitglied
Versuchs damit



Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

	public static void main(String[] args) throws IOException {		
		eingabe();		
	}
	
	public static void meineMethode(String eingabe) throws IOException {
		
		if("a".equals(eingabe)) {
			System.out.println("a gefunden");
		} else {
			eingabe();
		}
		
	}
	
	public static void eingabe() throws IOException {
		System.out.print("Eingabe: ");
		BufferedReader input = new BufferedReader ( new InputStreamReader (System.in));
		meineMethode(input.readLine().toLowerCase());
	}
	
}


Gruß,
Michael
 

joni

Mitglied
nrg, tausend Dank!!

jetzt habe ich es endlich verstanden, genau das habe ich gesucht.

Ja das StdInput habe ich von meiner Schule bekommen, wieso auch immer...

Vielen Dank für die mühe und dass du das Gerüst für mich gemacht hast...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pkm Wie kann man in Vaadin einer Zeile mit ThemeResource einen ClickEventListener geben? Frameworks - Spring, Play, Blade, Vaadin & Co 0
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
A WebClientBuilder Rückgabe einer Liste Frameworks - Spring, Play, Blade, Vaadin & Co 1
K Laden einer Datei vom Netzlaufwerk mit LDAP-Authentifizierung Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Hilfe beim Erstellen einer Java Web Anwendung gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 5
Christopher865 Netflix Eureka: Zwei Server - Einer stürtzt ab Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Mehere gleichnamige Konfigurationsparameter in einer application.properties Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand JUnit testen einer private Methode Frameworks - Spring, Play, Blade, Vaadin & Co 5
Avalon Mehrere Methoden in einer Klasse testen Frameworks - Spring, Play, Blade, Vaadin & Co 21
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
E Spring Webflow zwei POJO's in einer View Frameworks - Spring, Play, Blade, Vaadin & Co 0
M Spring: Den Context einer bean auslesen... Frameworks - Spring, Play, Blade, Vaadin & Co 3
B Wert in einer while schleife überspringen Frameworks - Spring, Play, Blade, Vaadin & Co 7
L \n , in die nächste Zeile springen Frameworks - Spring, Play, Blade, Vaadin & Co 11
R Txt Datei mit Notepad öffnen und zu bestimmter Zeile springen Frameworks - Spring, Play, Blade, Vaadin & Co 12
E JTable neue Zeile springen?! Frameworks - Spring, Play, Blade, Vaadin & Co 1

Ähnliche Java Themen

Neue Themen


Oben