Variablen Rücksprung nach If Abfrage

donnerkai

Mitglied
Hallo,

ich mache derzeit einen Onlinekurs für Java. Nun scheitere ich aber bereits bei den einfachsten Aufgaben.

Ich sollte ein Würfelspiel programmieren um die Random Funktionen kennen zu lernen.

Es wird nach einer Eingabe von 1 oder 2 gefragt.
Wenn 1 eingegeben wird, wird die Funktion 1 abgefahren, Wenn 2 eingegeben wird, wird die Funktion 2 abgefahren.
Nun will ich aber für den Fall einer anderen Eingabe als 1 oder 2 aber die Ausgabe "falschen Wert angegeben" produizeren.

Das habe ich leider nur falsch lösen können.

Java:
import java.util.*;

class Wuerfelspiel
{
  public static void main ( String[] args )
  {
    // Deklarieren und Initialisieren
    final int ENDSTAND = 10;
    Scanner scan = new Scanner( System.in );
    Random rand = new Random();
    int spielerscore = 0, computerscore = 0;
    int spielerwurf = 0, computerwurf;

    // Runden spielen, bis einer der Spieler den ENDSTAND erreicht hat
    while ( spielerscore < ENDSTAND && computerscore < ENDSTAND )
    {
      // Computer wirft
      computerwurf = rand.nextInt(6)+1 + rand.nextInt(6)+1 ;
      System.out.println("Der Computer wirft: " + computerwurf);

      // Spieler wirft
      System.out.print("1 -> 11-seitiger Wuerfel | 2 -> 6-seitiger Wuerfel (1 oder 2)? ");
      String wuerfeltyp = scan.nextLine();
      
      
    	  if ( wuerfeltyp.equals("1") )//wenn 1 eingegeben wurde
      		{
    		  spielerwurf = rand.nextInt(11)+2 ;
    		  System.out.println("Sie werfen 1 Wuerfel und haben: " + spielerwurf );
      		}
    	  else
    		  if (wuerfeltyp.equals("2"))
    		  { 
    			  spielerwurf=rand.nextInt(5)+1+rand.nextInt(5)+1;
    			  System.out.println("Sie werfen 2 Wuerfel und haben: " + spielerwurf );
    		  }
    		  else
    		  { System.out.println("Fail");
    		  
    		  
    		  }	  
    		  
    		  
      	  
      // Gewinner der Runde bestimmen und den Score anpassen
      if ( spielerwurf > computerwurf )
      {
        spielerscore = spielerscore + 1;
        System.out.println("Sie haben die Runde gewonnen!");
      }
      else
      {
        computerscore = computerscore + 1;
        System.out.println("Sie haben die Runde verloren!");
      }
      System.out.println("Score: Computer " + computerscore + ", Sie " + spielerscore + "\n");
    }

    // Gewinner des Spiels bestimmen
    System.out.println("Endstand: Computer " + computerscore + ", Sie " + spielerscore);

    if ( computerscore > spielerscore )
      System.out.println("Der Computer hat das Spiel gewonnen!");
    else
      System.out.println("Sie haben das Spiel gewonnen!");
    }}


Hier wird zwar, bei bsp. einer Eingabe von 3, die Meldung "Fail" ausgegeben, doch wird nun natürlich der Schritt nicht wiederholt und das Programm läuft weiter.
Wie kann ich das lösen?

Ich hatte schon den Ansatz über eine while Schleife den Fail auszugeben, immer dann, wenn die Eingabe nicht 1 oder 2 ist. Das habe ich aber syntaktisch gar nicht erst hinbekommen.
Es sah so aus
Java:
 while (!wuerfeltyp.equals("1"|"2")
{
system.out.println("Fail")
}

Hat vielleicht jemand einen Tipp für mich??
 

Templarthelast

Bekanntes Mitglied
Versuch es mal mit:
Java:
if(würfel1) {

}else if(würfel2){ // ich würde elseif anweisungen in die gleiche Zeile schreiben..

}else { // wird dann aufgerufen wenn es weder 1 oder 2 war

}
 

donnerkai

Mitglied
Das steht doch genauso schon in meinen Programm. Und ich hatte dazu ja geschrieben, dass das Programm ja im Ablauf nicht wieder an den Ursprungspunkt zurückkehrt um eine erneute Eingabe zu ermöglichen.



Versuch es mal mit:
Java:
if(würfel1) {

}else if(würfel2){ // ich würde elseif anweisungen in die gleiche Zeile schreiben..

}else { // wird dann aufgerufen wenn es weder 1 oder 2 war

}
 

Templarthelast

Bekanntes Mitglied
Dann must du am Anfang testen ob es die richtige Eingabe gab und nur dann die Spiellogik ausführen.

Java:
if(1 || 2) {
//Spiellogik
}else {
// falsche Zahl; Ende
}
 

jgh

Top Contributor
keine Ahnung was die Intention deines Tutorials ist...für mich schreit das ganze doch förmlich nach Methoden, aber hier mal ein Versuch einer Lösung:

Java:
	// Runden spielen, bis einer der Spieler den ENDSTAND erreicht hat
		while (spielerscore < ENDSTAND && computerscore < ENDSTAND) {
			// Computer wirft
			computerwurf = rand.nextInt(6) + 1 + rand.nextInt(6) + 1;
			System.out.println("Der Computer wirft: " + computerwurf);

			// Spieler wirft
			System.out
					.print("1 -> 11-seitiger Wuerfel | 2 -> 6-seitiger Wuerfel (1 oder 2)? ");
			String wuerfeltyp = scan.nextLine();
			while (!wuerfeltyp.equals("1") || !wuerfeltyp.equals("2")
					&& (spielerscore < ENDSTAND && computerscore < ENDSTAND)) {

				if (wuerfeltyp.equals("1"))// wenn 1 eingegeben wurde
				{
					spielerwurf = rand.nextInt(11) + 2;
					System.out.println("Sie werfen 1 Wuerfel und haben: "
							+ spielerwurf);

btw kannst du ja mal deine if-Abfragen mit den System.out´s überprüfen....ob da die Wahrheit gesagt wird???!!! ;)
 
B

bone2

Gast
Java:
do {
    würfeln
    auswerten
} while (würfel != 1 && würfel != 2)


bitte formatier das einheitlich
besonders klammern und einrücken, sonst geht jede übersicht verloren
 
Zuletzt bearbeitet von einem Moderator:

donnerkai

Mitglied
Hallo,
die Syntax stimmt so nicht. Ich speichere den Würfeltyp ja nicht in einer int, sondern in einem String. Das hat den Hintergrund, dass ich ja auch Eingaben wie a oder b oder sonstige Zeichen verarbeiten will.
Diese Syntax hier funktioniert nur mit Zahlwerten...

Java:
do {
    würfeln
    auswerten
} while (würfel != 1 && würfel != 2)


bitte formatier das einheitlich
besonders klammern und einrücken, sonst geht jede übersicht verloren
 
Zuletzt bearbeitet:

Ferve

Mitglied
Hi,

du kannst die 1 oder 2 auch als String vergleichen, schau mal ob dir folgender Code weiterhilft:

Java:
// Spieler wirft
            String wuerfeltyp = "";

            do {
                System.out.print("1 -> 11-seitiger Wuerfel | 2 -> 6-seitiger Wuerfel (1 oder 2)? ");
                wuerfeltyp = scan.nextLine();

                if (wuerfeltyp.equals("1") || wuerfeltyp.equals("2"))
                {
                    if (wuerfeltyp.equals("1"))//wenn 1 eingegeben wurde
                    {
                        spielerwurf = rand.nextInt(11) + 2;
                        System.out.println("Sie werfen 1 Wuerfel und haben: " + spielerwurf);
                    }
                    else if (wuerfeltyp.equals("2"))
                    {
                        spielerwurf = rand.nextInt(5) + 1 + rand.nextInt(5) + 1;
                        System.out.println("Sie werfen 2 Wuerfel und haben: " + spielerwurf);
                    }

                    // Gewinner der Runde bestimmen und den Score anpassen
                    if (spielerwurf > computerwurf)
                    {
                        spielerscore = spielerscore + 1;
                        System.out.println("Sie haben die Runde gewonnen!");
                    }
                    else
                    {
                        computerscore = computerscore + 1;
                        System.out.println("Sie haben die Runde verloren!");
                    }
                    System.out.println("Score: Computer " + computerscore + ", Sie " + spielerscore + "\n");
                }
                else
                {
                    System.out.println("1 oder 2 eingeben!");

                }
            }
            while (!wuerfeltyp.equals("1") || !wuerfeltyp.equals("2"));

Wie du siehst hab ich sowohl eine do-while Anweisung hinzugefügt, welche die Auswahl solange wiederholt bis 1 oder 2 eingeben wird und eine if-else Anweisung, welche das Ausführen des Würfelns und die Auswertung erst dann durchführt, wenn 1 oder 2 eingeben wurde.

EDIT: Fehlends ! eingefügt, Tippfehler meinerseits, ein Danke an bone2.
 
Zuletzt bearbeitet:
B

bone2

Gast
da fehlt ein
Code:
!
vor
Code:
würfeltyp.equals(2)


Hallo,
die Syntax stimmt so nicht. Ich speichere den Würfeltyp ja nicht in einer int, sondern in einem String. Das hat den Hintergrund, dass ich ja auch Eingaben wie a oder b oder sonstige Zeichen verarbeiten will.
Diese Syntax hier funktioniert nur mit Zahlwerten...
ich hab dir nur gezeigt wie man wieder zurückspringt, wenn die bedingungen nicht erfüllt sind, umbauen in dein string blabla must du das schon alleine
quasi genau das was du oben gerne im if else gehabt hättest, man macht es mit do while
 

donnerkai

Mitglied
super!

Dankeschön für die Lösung!


Hi,

du kannst die 1 oder 2 auch als String vergleichen, schau mal ob dir folgender Code weiterhilft:

Java:
// Spieler wirft
            String wuerfeltyp = "";

            do {
                System.out.print("1 -> 11-seitiger Wuerfel | 2 -> 6-seitiger Wuerfel (1 oder 2)? ");
                wuerfeltyp = scan.nextLine();

                if (wuerfeltyp.equals("1") || wuerfeltyp.equals("2"))
                {
                    if (wuerfeltyp.equals("1"))//wenn 1 eingegeben wurde
                    {
                        spielerwurf = rand.nextInt(11) + 2;
                        System.out.println("Sie werfen 1 Wuerfel und haben: " + spielerwurf);
                    }
                    else if (wuerfeltyp.equals("2"))
                    {
                        spielerwurf = rand.nextInt(5) + 1 + rand.nextInt(5) + 1;
                        System.out.println("Sie werfen 2 Wuerfel und haben: " + spielerwurf);
                    }

                    // Gewinner der Runde bestimmen und den Score anpassen
                    if (spielerwurf > computerwurf)
                    {
                        spielerscore = spielerscore + 1;
                        System.out.println("Sie haben die Runde gewonnen!");
                    }
                    else
                    {
                        computerscore = computerscore + 1;
                        System.out.println("Sie haben die Runde verloren!");
                    }
                    System.out.println("Score: Computer " + computerscore + ", Sie " + spielerscore + "\n");
                }
                else
                {
                    System.out.println("1 oder 2 eingeben!");

                }
            }
            while (!wuerfeltyp.equals("1") || !wuerfeltyp.equals("2"));

Wie du siehst hab ich sowohl eine do-while Anweisung hinzugefügt, welche die Auswahl solange wiederholt bis 1 oder 2 eingeben wird und eine if-else Anweisung, welche das Ausführen des Würfelns und die Auswertung erst dann durchführt, wenn 1 oder 2 eingeben wurde.

EDIT: Fehlends ! eingefügt, Tippfehler meinerseits, ein Danke an bone2.
 

Ferve

Mitglied
Ich habe es gerade selbst mal gestartet und mir ist noch ein Fehler meinerseits aufgefallen, die do-while Bedingung ist falsch, du musst das || noch mit einem && ersetzen.

Die Bedingung ist bei einem || ja immer true, weil eines von beiden immer stimmt, wenn du das noch korrigierst, kommst du auch aus dem do-while wieder raus, ich entschuldige mich dafür.
 
Zuletzt bearbeitet:
B

bone2

Gast
du musst jetzt sagen, das war absicht, damit bei donnerkai auch nur die geringste spur eines lerneffektes bleibt.
 

Ferve

Mitglied
du musst jetzt sagen, das war absicht, damit bei donnerkai auch nur die geringste spur eines lerneffektes bleibt.

Hehe, ich glaube ohne den Hinweis auf meinen Fehler hätte ich wahrscheinlich gar nicht mehr drüber geguckt :D

Mit dem Lerneffekt haste allerdings Recht, von selbst auf eine Lösung kommen ist i.d.R. besser.
Zumal er ja alles Nötige hatte, aber auf so etwas werde wohl beim nächstem Mal besser drauf achten :oops:
 
H

hüteüberhüte

Gast
BufferedReader würde ich statt Scanner bevorzugen.

Zu dem Problem: Entweder
- du prüfst die Eingabe vor der eigentlichen Spiellogik auf ihre Richtigkeit
- oder du verwendest innerhalb der Schleife eine break;-Anweisung, um die Schleife zu verlassen,
- oder du benutzt eine Sprungmarke, um die Ausführung an einer anderen Stelle fortzusetzen.

Weiteres: Galileo Computing :: Java ist auch eine Insel - 2 Imperative Sprachkonzepte
Galileo Computing :: Java ist auch eine Insel - 2 Imperative Sprachkonzepte
String (Java Platform SE 6)
http://www.java-forum.org/java-basics-anfaenger-themen/22363-unterschied-zwischen-equals.html

[OT]Über ein Danke würde ich mich freuen :toll:[/OT]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Wo geschieht der "Rücksprung, bei der rekursiven Folge Java Basics - Anfänger-Themen 5
S Tiefensuche Probleme - Der "Rücksprung" Java Basics - Anfänger-Themen 4
M Vector verliert Daten beim Rücksprung im Konstruktor Java Basics - Anfänger-Themen 5
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
D Programmieren nach UML Java Basics - Anfänger-Themen 2
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
K log4j nach log4j2 überführen Java Basics - Anfänger-Themen 0
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Zahlungen nach Monat filtern Java Basics - Anfänger-Themen 2
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
I String nach Wort suchen Java Basics - Anfänger-Themen 6
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
C Meldung einer Klasse nach "oben" Java Basics - Anfänger-Themen 6
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
R JDK installieren Durcheinander nach installation von SE 14.02 Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
L Arrayliste von hinten nach vorne ausgeben Java Basics - Anfänger-Themen 10
F Array nach Objektattribut durchsuchen Java Basics - Anfänger-Themen 6
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben