-1
  static boolean check(double money)
  {
    String scont, yes = "yes", no = "no";
    boolean bcont;
    if (money == 0) {
      System.out.println("You are broke and can no longer play.");
      bcont = false;
      return bcont;
    }
    System.out.println("You have " + form.format(money) + " left.");
    System.out.println("Would you like to continue playing? (Yes or no?)");
    scont = in.nextLine();
    if (scont.equalsIgnoreCase(yes)) {
      bcont = true;
      return bcont;
    }
    else if (scont.equalsIgnoreCase(no)) {
      bcont = false;
      return bcont;
    }
    else {
      System.out.println("Invalid answer.");
      bcont = check(money);
      return bcont;
    }
  }

显然,这只是我程序中的一个单一功能。当它到达scont = in.nextLine();它时,它会跳过用户输入并在主函数中中断函数所在的循环。

4

2 回答 2

0

几点观察:

  • 在 Java中,您应该始终使用for 字符串比较来.equals()代替==
  • 但是,这是一个有争议的问题,因为equalsIgnoreCase()无论如何都会返回一个布尔值;您不需要在条件中执行布尔评估
  • Scanner正如@David Wallace 所观察到的,我怀疑您可能错误地使用了该课程

检查您对Scanner课程的使用情况可能会有所帮助。BufferedReader您可以通过简单地使用 a临时接收用户输入来确定这是否是问题的根源。

例如

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
...
scont = br.readLine();
于 2013-10-21T01:28:38.823 回答
0

Scanner您很可能正在从不消耗换行符的情况下读取货币价值。在这种情况下添加in.nextLine()消耗这个字符

double money = in.nextDouble();
in.nextLine(); // add
boolean result = check(money);

(当然BigDecimal是货币金额的首选数据类型)

于 2013-10-21T01:25:38.433 回答