2017-12-31 62 views
1

私は非常にプログラミングに慣れていますので、私の基本的かつ限定的な理解に間違いがあります。基本的には、私は学校のプロジェクトのためのメモリゲームを作成しています。私は、このように動作するforループで2つのdo-whileループを実行します。ユーザーは、最初のdo-whileループで実行される4つのランダムな文字を入力するように求められ、2番目のdo-whileループは、ユーザが最初に入力したフレーズを再入力する。Forループ内のJava - 2-Do-Whileループ

私の最初の質問は、最初のdo-whileが実行するのはなぜですか?私はforループが最初のdo-whileを実行し、私のパラメータに基づいて繰り返しを実行すると仮定しているため、2番目のプログラムは決して実行されませんが、理由を理解する助けに感謝し、おそらく私のプログラムを再フォーマットします。

私の2番目の質問は、正確な順序で正確に推測されたすべての文字についてユーザー10ポイントをネットに入れ、間違った順序で間違った文字を10ずつ差し引くような種類のスコアカウンターがあります。どうすればこのようにすることができますか?これを可能にするためには何を活用しなければなりませんか?

最後に、ユーザーが入力した文字を隠す方法を指し示すことができたら、私は感謝します。

私のプログラムをより効率的にするための他の提案は非常に高く評価されます!

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

SOへようこそ!これを複数の小さな対象となる質問に分割したい場合があります。 https://stackoverflow.com/help/how-to-askを参照してください – navicore

+0

問題は、すぐにあなたが持っているように 'userLetters1.length()== stagePlayer'は、あなたが' stagePlayer = stagePlayer + 2実行することです; '。したがって、最初のdo-whileループの終了条件は決して満たされません。 – oneturkmen

+0

最初のdo-whileループの 'if'文で' break'する必要があると思います。 – oneturkmen

答えて

0

代わりにデバッグしてください。行ごとに何が起こっているのかを見て、最初に行ったことが決して終わらない理由を特定します。終了した場合、私は2番目が実行されなかった理由はありません。

2番目の質問では、私はStringクラスのドキュメントを読むことを奨励します。あなたが必要とするのは、文字を繰り返し処理し、それに応じて複写の結果に応じることだけです。以前のユーザー入力を非表示にするには、コンソールで

、あなたは次のように画面をクリアすることができます:

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