【问题标题】:While loop never return falseWhile 循环永远不会返回 false
【发布时间】:2021-11-09 01:26:23
【问题描述】:

我有这个while循环,问题是如果条件为假,它将永远不会中断并继续打印为真我正在使用firebase来跟踪值

private var gLTF: Boolean? = null

myRef.addValueEventListener(object : ValueEventListener {

    override fun onDataChange(dataSnapshot: DataSnapshot) {
        var gsLvlR = dataSnapshot.child("gLvl").value.toString()
        var gLt = gsLvlR.toInt()

        CoroutineScope(Dispatchers.Default).launch {
            while (checkGsValue(gLt)) {

                println("true")

                if (!checkGsValue(gLt)) {
                    println("false")
                    break
                }
                delay(15000)
            }

        }
    }

    override fun onCancelled(error: DatabaseError) {
        // Failed to read value
    }
})
//Function
fun checkGsValue(gL: Int): Boolean {
    gLTF = gL > 250
    return gLTF as Boolean
}

这里是 logcat 的结果

2021-11-09 04:20:25.888 27709-27757/com.example.testing I/System.out: true
2021-11-09 04:20:40.890 27709-27757/com.example.testing I/System.out: true
2021-11-09 04:20:55.893 27709-27757/com.example.testing I/System.out: true
2021-11-09 04:21:10.894 27709-27757/com.example.testing I/System.out: true
2021-11-09 04:21:25.897 27709-27757/com.example.testing I/System.out: true
2021-11-09 04:21:40.899 27709-27757/com.example.testing I/System.out: true
2021-11-09 04:21:55.901 27709-27757/com.example.testing I/System.out: true
2021-11-09 04:22:10.902 27709-27757/com.example.testing I/System.out: true
2021-11-09 04:22:25.904 27709-27757/com.example.testing I/System.out: true

【问题讨论】:

  • 我建议你也打印gLt

标签: android firebase kotlin


【解决方案1】:

您正在为每个不是 gl > 250 的 onDataChange 调用创建一个无限循环

这个while循环永远不会结束,因为gLt在这个上下文中没有更新它永远不会改变。

        while (checkGsValue(gLt)) {
            println("true")
            if (!checkGsValue(gLt)) {
                println("false")
                break
            }
            delay(15000)
        }

如果在 gLvl 为 251+ 时单独对每个快照执行操作,它将打印 false

 override fun onDataChange(dataSnapshot: DataSnapshot) {
        var gsLvlR = dataSnapshot.child("gLvl").value.toString()
        var gLt = gsLvlR.toInt()
        if(checkGsValue(gLt)){
            println("true")
        }else{
            println("false")
        }
 }

【讨论】:

  • 好的,我现在明白了,即使值改变并且方法变为假,而循环仍然是真的......谢谢:)
猜你喜欢
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 2014-05-30
  • 2018-12-18
  • 1970-01-01
相关资源
最近更新 更多