2012-04-23 4 views
0

これは推測ゲームの完全なコードの一部です。推測ゲームクラスでエラーが見つかりません

public static void Game(){    //Second page of game with option of continue playing when guessed close enough to answer. 
    Scanner scan = new Scanner(System.in); 

    GuessingGame testgame=new GuessingGame(); 

    testgame.Generator(); 
    int num = testgame.GetGenNum(); 
    //Produces a random number between 1 and 100 inclusive of 1 and 100 


    System.out.println("Guess the target integer which is between 1 and 100 inclusive"); 

    int guess=scan.nextInt(); 

    int difference=(guess-num); 



    while(guess!=num){ 
     int yesCounter=0; 

     System.out.println("Guess again " +num+" "+difference); 
     guess=scan.nextInt(); 
     difference=(guess-num); 


     ///something wrong here, shouldnt repeat if difference too big 
     if(difference<=5||difference>=-5){ //something wrong with the condition, it says its close enough even tho it isnt.  
     while(yesCounter<1){ 
      System.out.println("Close enough, do you want to keep Guessing? Y/N "); 
      yesCounter++; 


      String play = scan.nextLine(); 
      //play=play1; 
      while(!(play.equalsIgnoreCase("y"))) 
      { 


       if(play.equalsIgnoreCase("n")){ 
        System.exit(1); 
       } 

       else{ 
        if((play.equalsIgnoreCase("y"))){ 
         invalid(); 
         guess=scan.nextInt(); 
        } 
        else{ 
         Game();    ///TAKE note as it might restart the game with new random integer 
        } 
       } 

      } 
     } 

    } 

    } 

出力は次のようになります。

.........................

プレイ? Y/N

Y

は、再び1及び100包括

推測間44 6

44十分に近い

ターゲット整数を推測に行います推測を続けたいですか? Y/N

は1と100包括

間にあるターゲットの整数を推測..........................

問題は、ユーザーが数字を推測したときの条件は、推測値と生成された数値の差が5以下であれば、その状態が十分に近いことをユーザーに伝え、推測を続けるかどうかを尋ねますが、まだ成就していますが、誰かを助けることができますか?

答えて

0
while(!(play.equalsIgnoreCase("y"))) 
     { 


      if(play.equalsIgnoreCase("n")){ 
       System.exit(1); 
      } 

      else{ 
       if((play.equalsIgnoreCase("y"))){ 
        invalid(); 
        guess=scan.nextInt(); 
.... 

if((play.equalsIgnoreCase("y")))以下である場合、これは明示的に入力することはできません、それはであるループいるので、あなたに教えてくれますそれが本当ならば。あなたの問題がどこにあるのですか?else-branchのGame()を呼び出すため、常にゲームを再開します。要するに、これはあなたが何をすべきかです:

boolean _true = true; 

while(! _true) { 

    if(_true) { 
     //impossible 
    } 
    else { 
     Game(); //ALWAYS 
    } 
} 

あなたは宿題とあなたの質問にタグ付けされたので、私は完全な補正を与えることはありませんが、今はそれがうまくいかない場合は、あなたが何を把握することができる必要があります知っています進むために変更する必要があります。

+0

大変感謝!私は今それを探しています。 – Liquified

+0

while条件の前に、機能しなかった行があったという別の問題がありました。String play = scan.nextLine();コマンドはまったく機能しませんでした。未知の理由から私はまだ見つかっておらず、私を夢中にしています... – Liquified

-1

あなたは(注:(difference<=5||difference>=-5)を使用する条件は常にtrueです。)またはを混合します。

if (Math.abs(difference)<=5) { ... } # difference is 5 or less 

if (Math.abs(difference)>=5) { ... } # difference is 5 or more 

RESP:あなたの代わりにMath.abs(...)を使用する場合は、より良い次

if (difference<=5 && difference>=-5) { ... } # difference is 5 or less 

または

if (difference<=-5 || difference>=5) { ... } # difference is 5 or more 

読めるのいずれかを使用することができます。

+0

ありがとう!それは誰かが私にそれを説明するときにははるかに明確に見えるxD – Liquified

-1

if(difference<=5||difference>=-5)これは、差が5未満か-5より大きい場合に表示されます。すべての数値が5未満または-5より大きいため、は常にです。

私はあなたが望むものはif(Math.abs(difference)<=5)のようなものだと仮定しています。お使いの差変数の絶対値がtrueになることはありません右ではありません5.

+0

それは、同じを行うコードの小さな部分の代わりに、それを修正することはありません... – MarioDS

+1

確かにそれについては?彼のコードはすべての数字に当てはまりますが、私のコードはそうではありません。それとも私はそれを失っていますか? :) – Jon7

+0

いいえ、その声明は(私がそれを失っていない限り)動作するはずですが)、**あなたは**それを '||'の代わりに '&&'にするべきです。しかし、Jon7が示唆したことは、その特定のif文の方が優れているということです。 – MarioDS

関連する問題