为什么我的java程序跳过用户字符串输入?

时间:2013-10-21 01:16:21

标签: java string input java.util.scanner

  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();时,它跳过用户输入并在主函数中打破函数所在的循环。

2 个答案:

答案 0 :(得分:0)

您很可能正在阅读Scanner中没有消费换行符的金钱价值。在这种情况下,添加in.nextLine()来使用此角色

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

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

答案 1 :(得分:0)

一些观察结果:

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

检查您对Scanner课程的使用情况可能会有所收获。只需使用BufferedReader暂时接收用户输入,即可确定这是否是问题的根源。

e.g。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
...
scont = br.readLine();