【问题标题】:Why is my java program skipping user string input? [duplicate]为什么我的 java 程序会跳过用户字符串输入? [复制]
【发布时间】:2013-10-21 01:16:20
【问题描述】:
  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(); 时,它会跳过用户输入并在主函数中中断函数所在的循环。

【问题讨论】:

  • 你确定要写else if (scont.equalsIgnoreCase(no) == false) { 吗?
  • 我怀疑问题可能不在此特定方法范围内。特别是,您可能正在从Scanner 获取一个数字,但没有获取它后面的新行。能否请您发布所有代码,以便我们看看这是否是问题所在?
  • 附注:equalsIgnoresCase() 返回一个布尔值。您不需要对布尔值进行比较(例如,equalsIgnoresCase() == true 可以缩短为 equalsIgnoresCase()。如果您希望执行条件块,则该方法返回 false,您可以使用 !(不是) 运算符。
  • 感谢 Java 恶魔。听起来这可能是问题所在。我会检查并告诉你。
  • 这似乎是问题所在。现在我有另一个问题。它将跳过用户输入一次。然后,它将转到 else 语句,调用自身,然后允许用户输入。这对我来说根本没有意义。

标签: java string input java.util.scanner


【解决方案1】:

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

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

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

【讨论】:

  • @Patriot524 是的,我知道 :)
  • 抱歉,愚蠢的评论......我觉得自己很愚蠢...... ='(
【解决方案2】:

一些观察:

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

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

例如

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

【讨论】:

  • 我尝试使用System.readline(),但是根据编译器不存在这样的方法。也许是一个类名?我尝试使用System.in.readline(),但它也不存在,但System.in 存在。
  • 抱歉,我没有想清楚。请参阅我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多