2015-10-24 80 views
2

任何人都可以告诉我,当我击中y/n时 - 为什么我的比赛不停止,它只会重新开始。我在跑步前打电话给我的isDone()方法,但它只是反复运行。为什么我的程序不停止?

public class Model { 
    int numberToGuess = 29; 
    int counter; 
    boolean isDone; 
    Scanner sc = new Scanner(System.in); 

    public Model() { 
     isDone = false; 
     run(); 
    } 

    public void run() { 
     welcomeMessage(); 
     while (true) { 
      guessNumber(); 
     } 
    } 

    public void welcomeMessage() { 
     System.out.println("Welcome to " + '\n' + "***** GUESS THE NUMBER *****"); 
    } 

    public void guessNumber() { 
     System.out.println("Please enter number and hit 'Enter'" + '\n'); 
     if (sc.hasNextInt()) { 
      int input = sc.nextInt(); 
      counter++; 
      if (input < numberToGuess) { 
       System.out.println('\n' + "Your guess is too low!" + '\n'); 
      } else if (input > numberToGuess) { 
       System.out.println('\n' + "Your guess is too high!" + '\n'); 
      } else { 
       System.out.println("Congratulations, you guessed the number!" + '\n' + "You guessed the number in " + counter + " guess." + '\n'); 
       isDone(); 
      } 
     } else { 
      System.out.println("Invalid input, please enter a number!" + '\n'); 
      sc.next(); 
     } 
    } 

    public void isDone() { 
     System.out.println("Do you wanna play again? Enter y/n"); 
     if (sc.hasNext()) { 
      String input = sc.next(); 
      if ("y".equals(sc)) 
       if (input.equals("y")) { 
        isDone = false; 
        guessNumber(); 
       } else if (input.equals("n")) { 
        isDone = true; 
       } 
     } 
     System.out.println("Invalid input, please enter y/n to continue"); 
     sc.next(); 
    } 
} 
+3

你知道这是什么'如果( “Y” .equals(SC))'手段? – Tom

回答

8

你有一个无限循环:

while (true) 

世界上没有条件,终止程序。

你可以使用全局变量isDone与更换true

while (!isDone) 
{ 
    guessNumber(); 
} 
+0

同样的问题仍然存在后,替换它,我已经尝试过,我只是忘记编辑回来之前发布它在这里:)。有什么建议么? @Darren Davis: ''public void run() { welcomeMessage(); (!isDone) { guessNumber(); } }'' – Grumme

+1

@Jakob由于它不适合你,你真的不知道'if(“y”.equals(sc))'意味着什么......你能解释你为什么写了那? – Tom

3

isDone()方法有逻辑缺陷。我已纠正它。

步骤1:甚至在进入的“n”

后使isDone =真,这是造成程序继续后校正的“y”的条件为输入并评论最后两行:更改 while (true)while (!isDone)

步骤2

修改后的代码:

public void isDone() { 
     System.out.println("Do you wanna play again? Enter y/n"); 

     if (sc.hasNext()) { 
      String input = sc.next(); 
      if ("y".equals(input)) { 
       isDone = false; 
       guessNumber(); 
      } else if (input.equals("n")) { 
       isDone = true; 
      } 
     } 
     //System.out.println("Invalid input, please enter y/n to continue"); 
     //sc.next(); 
    } 

编辑:在while条件缺陷的阐释。

您与“Y”,而不是输入值从扫描仪具有“Y”

+1

你可以添加解释为什么'if(“y”.equals(sc))''在这里不起作用吗?我猜OP可能需要这个。 – Tom

+1

感谢您的建议。我编辑了答案。 –

-1

好吧,现在它的工作:)阅读比较扫描仪的对象。解决办法:

公共类型号 {

int numberToGuess = 29; 
int counter; 
boolean isDone; 

Scanner sc = new Scanner(System.in); 

public Model() 
{ 
    isDone = false; 
    run(); 
} 

public void run() 
{ 
    welcomeMessage(); 

    while (!isDone) 
    { 
     guessNumber(); 
    } 
} 

public void welcomeMessage() 
{ 
    System.out.println("Welcome to " + '\n' + "***** GUESS THE NUMBER *****"); 
} 

public void guessNumber() 
{ 

    System.out.println("Please enter number and hit 'Enter'" + '\n'); 

    if (sc.hasNextInt()) 
    { 
     int input = sc.nextInt(); 

     counter++; 

     if (input < numberToGuess) 
     { 
      System.out.println('\n' + "Your guess is too low!" + '\n'); 

     } 
     else if (input > numberToGuess) 
     { 
      System.out.println('\n' + "Your guess is too high!" + '\n'); 
     } 
     else 
     { 
      System.out.println("Congratulations, you guessed the number!" + '\n' + "You guessed the number in " + counter + " guess." + '\n'); 
      isDone(); 
     } 
    } 
    else 
    { 
     System.out.println("Invalid input, please enter a number!" + '\n'); 
     sc.next(); 
    } 
} 

public void isDone() 
{ 
    System.out.println("Do you wanna play again? Enter y/n"); 

    if (sc.hasNext()) 
    { 
     String input = sc.next(); 

     if (input.equals("y")) 
     { 
      isDone = false; 
      counter = 0; 
     } 

     else if (input.equals("n")) 
     { 

      isDone = true; 
     } 
     else 
     { 
      System.out.println("Invalid input"); 
      isDone(); 
     } 
    } 
} 
0

一个小的变化,你需要做的

public void run() { 
    welcomeMessage(); 
    //while (true) { 
     while (!isDone) { 
     guessNumber(); 
    } 
} 
相关问题