【问题标题】:Could someone please explain how the boolean in this code works?有人可以解释一下这段代码中的布尔值是如何工作的吗?
【发布时间】:2020-05-29 00:27:16
【问题描述】:

这个问题更多是为了理解我正在使用的部分代码。第 1 行中的“有效”布尔值成为第 2 行中 while 语句的条件。当您将布尔值放入 while 条件时,是否会自动更改布尔值?我不明白如果valid 被初始化为false,它会在while 循环之外变为true - 除非它处于while 条件中?我包含了一部分代码,这样您就可以看到发生了什么。这是我试图理解的分数计算器的一部分。

感谢您的帮助!

boolean valid = false;   
while (!valid) {
    System.out.println("Please enter a Fraction a/b or integer (a): ");
    firstFraction = scan.nextLine();
    valid = validFraction(firstFraction);
    if (valid) {
        int findSlash = firstFraction.indexOf("/");
        if (findSlash >= 0) {
            firstFractionNumerator = Integer.parseInt(firstFraction.substring(0, findSlash));
            firstFractionDenominator = Integer.parseInt(firstFraction.substring(findSlash + 1, firstFraction.length()));
        } 
        else {
            firstFractionNumerator = Integer.parseInt(firstFraction.substring(0, firstFraction.length()));
            firstFractionDenominator = 1;
        }
    }
}

【问题讨论】:

  • 期待两行到valid = validFraction(firstFraction);
  • 没错,firstFraction 是一个字符串类型,而您将其赋予布尔值。
  • @PranavPatel 代码没有将字符串 firstFraction 提供给布尔值,它给出了验证必须是布尔值的字符串的结果,应该没问题。
  • 写得不好。 if 块应该在循环之后,无条件。
  • 感谢大家的cmets!这些帮助我从不同的角度看待这段代码。我现在看到 validFraction 方法正在影响这个 while 语句的影响方式。再次感谢! :)

标签: java while-loop boolean conditional-statements


【解决方案1】:

只是从概念上考虑它。目标是得到一个有效的分数。在您询问用户之前,您没有任何分数,因此它无效。然后你问用户,它可能是有效的,也可能是无效的。如果有效,则退出循环,因为你已经成功,如果无效,你需要再次询问他们,所以你需要再次循环。

考虑这个简单的例子。如果我们在 6-10 之间生成一个随机数,我们将继续循环,如果我们选择一个 0-5 之间的数字,则退出

boolean shouldContinue = true;

while(shouldContinue) {
    shouldContinue = new Random().nextInt(10) > 5;
}

【讨论】:

  • 您的解释真的很有帮助,我感谢您的反馈。你的演练很有意义。我使用了您提供的示例代码并用它运行了一些测试,我想我开始了解这个 while 循环发生了什么。因为“有效”布尔值最初设置为 false,所以必须将条件设置为 true,以便程序能够运行 while 循环(否则它会跳过它)。换句话说,要让 while 循环使用布尔值,该值必须设置为 true。听起来对吗?
  • 正确。对于任何 while (<boolean expression>) {...} 循环,<boolean expression> 必须评估为 true 才能继续循环。还要记住,“不假”(!false)是真的。
【解决方案2】:

根据代码,它并不意味着在 while 循环之外是真的。循环的概念是在找到有效的 firstFraction 之前一直工作。换句话说;代码将一直要求输入,直到用户给出有效的输入(validFraction 方法中的每个代码规则都有效)。

然后它接受有效输入并对其进行处理,if (valid) {} 中的内容与循环决策无关,它只是用于检查输入是 a/b 还是整数的天气。 然后循环退出,代码继续执行while循环之后的代码。

总之,循环是好的。

【讨论】:

  • 更有意义!我被困在导致工作时间的原因上。用户@jb 的评论。关于while循环加上他的代码示例让我想知道是否对于任何使用布尔条件的while循环,该布尔条件必须设置为true才能使while循环工作,如果设置为false,计算机将完全跳过那个while循环。希望这个观察是准确的——如果我错了,请纠正我!您对代码回答 validFraction 方法以离开循环的方式的评论回答了我问题的后半部分 - 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多