【问题标题】:while loop not exiting when value met当值满足时,while循环不退出
【发布时间】:2017-09-04 13:52:47
【问题描述】:

我有一个场景,我想检查应用程序中单元格的值。当单元格的值达到 0 或 -1 时,我希望测试继续进行。所以我有:

while (!cell.Value.Equals("0") || !cell.Value.Equals("-1")) 
{
    Console.WriteLine("Value ({1})",cell_value.Value);
    Thread.Sleep(15000);
}

不幸的是,当单元格达到 0 时,它似乎并没有“跳出”循环。

Output:
    Value (20)
    Value (13)
    Value (10)
    Value (9)
    Value (4)
    Value (1)
    Value (0)
    Value (0)
    Value (0)
    Value (0)

最好用 while / do + while 循环来试试这个,还是用 for 循环更好?

谢谢,

J.

【问题讨论】:

  • 您的布尔表达式将始终为真 - 即不存在“0”和“-1”的字符串会导致其为假。
  • 我不是说,如果我的单元格不是 0 或我的单元格不是 -1 则睡眠 15 秒.. 所以 20、13、10 等不是 0 或 -1,所以请继续等待直到单元格为 0 或 -1。
  • 或者同样明智的是,如果 cell.equals 0 或 -1 然后中断.. 但它只执行一次,所以我希望它循环并继续检查,所以一个 for 循环检查 x 数量次,但我不想将循环限制为 x 的值,因为它可能需要一些时间才能达到 0 或 -1
  • 约翰,您的循环明确表示while string is not "0" OR is not "-1" - 这总是正确的。请检查此处提供的答案以获得正确的实施。

标签: c# for-loop while-loop coded-ui-tests


【解决方案1】:

你的情况应该是:

while (!cell.Value.Equals("0") && !cell.Value.Equals("-1"))

正如目前所写的那样,至少有一侧为真(任何字符串总是不是“0”不是“-1”)。

【讨论】:

    【解决方案2】:

    || 表示至少有一个必须为真。因此,当您输入 0 时,您得到的是:

    1. !cell.Value.Equals("0") - “不正确” = false
    2. !cell.Value.Equals("-1") - “不假” = true

    因此它进入。你想改用&&

    while (!cell.Value.Equals("0") && !cell.Value.Equals("-1")) 
    

    或者这样写:

    // while not (equals 0 or -1)
    while (!( cell.Value.Equals("0") || cell.Value.Equals("-1")))
    

    【讨论】:

    • 0 或 -1 是一个可以跳出循环的可接受值。因为它倒计时到 0,如果它的 3 和 -5 的值进入它默认为 -1 ..
    • while (!( cell.Value.Equals("0") || cell.Value.Equals("-1"))) 很成功。谢谢!
    猜你喜欢
    • 2023-01-12
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2022-01-22
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多