2017-12-31 45 views
1

Ich bin ziemlich neu in der Programmierung, also entschuldige mein grundlegendes und begrenztes Verständnis. Im Wesentlichen erstelle ich ein Memory-Spiel für ein Schulprojekt. Ich möchte 2 do-while-Schleifen in einer for-Schleife machen, die so funktioniert: Der Benutzer wird aufgefordert, 4 zufällige Buchstaben einzugeben, die in der ersten Do-While-Schleife gemacht werden, und die zweite Do-while-Schleife fragt die Benutzer, um die Phrase, die sie ursprünglich eingegeben hatten, erneut einzugeben.Java - 2-Do-While-Schleifen in einer For-Schleife

Also meine erste Frage ist, warum nur die erste Do-While ausführen? Ich gehe davon aus, dass die for-Schleife das First-Do-While-Verfahren ausführt und sich dann auf Basis meiner Parameter wiederholt, daher wird das Zweite nie ausgeführt, aber ich würde jede Hilfe verstehen, warum und mein Programm vielleicht entsprechend neu formatieren. Meine zweite Frage ist, dass ich eine Art Punktzahl-Zähler haben möchte, der dem Benutzer 10 Punkte für jeden korrekt erratenen Buchstaben in der richtigen Reihenfolge bringt und 10 für jedes falsche Zeichen in der falschen Reihenfolge abzieht. Wie würde ich das tun und was müsste ich nutzen, um dies zu ermöglichen?

Schließlich würde ich mich freuen, wenn jemand auf eine Art und Weise zeigen könnte, die Buchstaben zu verbergen, die der Benutzer eingibt.

Alle anderen Vorschläge, um mein Programm effizienter zu machen, würden sehr geschätzt werden!

import java.util.Scanner; 
import java.lang.String; 

public class MemoryGame { 
public static void main(String[]args){ 
Scanner input = new Scanner(System.in); 
int choice; 

System.out.println("This is a M E M O R Y G A M E"); 
System.out.println("Press '1' for instructions"); 
System.out.println("Press '2' to play"); 

choice = input.nextInt(); //Checks user selection and redirects 
if (choice == 1) { 
    Instructions(); 
} else { 
    playGame(); 
} 
input.close(); 
} 

public static void Instructions() { //Instructions method 
int choice; 
Scanner input = new Scanner(System.in); 

System.out.println("This is a memory game. Below are a few instructions  on how to play as well as few hints, and tricks"); 
System.out.println("> Players wlll be given a input box to input a given number of letters or numbers depending on the stage level."); 
System.out.println("> To progress and gain points, users must sucessfully recall the set phrase that they have inputted."); 
System.out.println("> Based on the number of correct letters, users will gain points and progress through a set of levels that increase in difficulty."); 
System.out.println("> Upon making 3 incorrect character selections users will be displayed a 'Game Over' screen from which they may:"); 
System.out.println("1. Head to the main menu"); 
System.out.println("2. View the instructions"); 
System.out.println("3. Play again"); 
System.out.println("If users successfully oomplete 5 stages with no errors, they will be prompted a challenge level in which more characters will be required"); 
System.out.println(" "); 
System.out.println("1. Press '1' to return to play"); 

choice = input.nextInt(); 
if (choice == 1) { 
    playGame(); 
} 
input.close(); //Closes input. 
} 

public static void playGame() { 
int userNumbers1; 
int userNumbers2; 
String userLetters1; 
String userLetters2; 
int scorePlayer; 
int livesPlayer = 3; 
int stagePlayer = 4; 
int stageGeneral = 1; 
Scanner input = new Scanner(System.in); 

System.out.println("This is the M E M O R Y G A M E"); 
System.out.println("Stage 1 initializing . . ."); 
System.out.println("Please enter " + stagePlayer + " letters of your choice."); 

for (int i = 0; i <= 10; i++) { 

do { 
userLetters1 = input.nextLine(); 
userLetters1 = userLetters1.toLowerCase(); userLetters1.trim(); 
if (userLetters1.length()==stagePlayer) { 
    System.out.println (". . .!"); 
    stagePlayer = stagePlayer + 2; 
    stageGeneral = stageGeneral + 1; 
} else { 
    System.out.println("Please enter " + stagePlayer + " letters"); 
} 
} 
while (userLetters1.length() != stagePlayer); 

do { 
userLetters2 = input.nextLine(); 
userLetters2 = userLetters2.toLowerCase(); userLetters2.trim(); 
if (userLetters2.length()==userLetters1.length() && userLetters2.equals (userLetters1)) { 
    System.out.println (". . ."); 
    System.out.println ("Great job!"); 
    System.out.println("Stage " + stageGeneral + " initializing . . ."); 
    System.out.println("Please enter " + stagePlayer + " letters of your choice."); 
} else { 
    System.out.println ("Please enter " + userLetters1.length() + "letters that were previously entered."); 
} 
} 
while (userLetters1.length() != userLetters2.length()); 
} 
} 
} 
+1

willkommen zu SO! Vielleicht möchten Sie dies in mehrere kleine gezielte Fragen aufteilen. siehe https://StackOverflow.com/Help/how-to-ask – navicore

+0

Problem ist, dass sobald du 'userLetters1.length() == stagePlayer' hast, du' stagePlayer = stagePlayer + 2; 'ausführst. Daher wird Ihre Beendigungsbedingung der ersten Do-While-Schleife nie erfüllt. – oneturkmen

+0

Ich denke, Sie müssen in der 'if'-Anweisung in der ersten Do-While-Schleife" brechen ". – oneturkmen

Antwort

0

Nicht annehmen. Debuggen Sie stattdessen. Schauen Sie, was Zeile für Zeile passiert und bestimmen Sie den Grund, warum die erste Schleife nie beendet wird. Wenn ich ihn verlassen habe, sehe ich keinen Grund, warum der zweite nicht ausgeführt wurde.

Für die zweite Frage würde ich einschreiben String Class Dokumentation. Alles, was Sie brauchen, ist, durch die Charaktere zu iterieren und entsprechend auf die Ergebnisse der Gemeinsamkeiten zu reagieren.

In Konsole vorherige Benutzereingaben verstecken Sie den Bildschirm wie deaktivieren könnten:

Runtime.getRuntime().exex("cls);