Intellij Idea 如何摆脱布尔方法总是反转的警告?

btxsgosb  于 2023-02-07  发布在  其他
关注(0)|答案(1)|浏览(321)
fun findError(puzzle: Array<IntArray>): Boolean {
    for (z in 0..8) {
        val blockNums = mutableListOf<Int>()
        val xNums = mutableListOf<Int>()
        val yNums = mutableListOf<Int>()

        for (index in 0..8) {
            xNums.add(puzzle[z][index])
            yNums.add(puzzle[index][z])
            blockNums.add(puzzle[blocks.xy[z + 1][index]][blocks.xy[z][index]])
            if (blockNums.count() != blockNums.toSet().count() ||
                yNums.count() != yNums.toSet().count() ||
                xNums.count() != xNums.toSet().count()) return false
        }
    }
    return true
}

这个函数可以正常工作,但是Intellij IDE发出了这个警告。“布尔方法'findError'总是反转的”。我有点理解它的意思,我知道我可以抑制它。
我不知道如何重写代码块来满足错误而不改变功能。我应该抑制它还是有更合适的方式来表达这一点?我是一个初学者,正在学习。

ma8fv8wu

ma8fv8wu1#

IntelliJ警告你哪一行,是这句话吗?

if (blockNums.count() != blockNums.toSet().count() ||
                yNums.count() != yNums.toSet().count() ||
                xNums.count() != xNums.toSet().count()) return false

如果是这样,那是因为这个问题很复杂,而且除了你之外,其他人可能很难理解。下面是你如何降低复杂性的两个想法:(一)

if (blockNums.size != blockNums.toSet().size) return false
if (yNums.size != yNums.toSet().size) return false
if (xNums.size != xNums.toSet().size) return false

或(2)

val blocksDiffer = (blockNums.size != blockNums.toSet().size)
val yDiffer = (yNums.size != yNums.toSet().size)
val xDiffer = (xNums.size != xNums.toSet().size)
if(blocksDiffer || yDiffer || xDiffer) return false

(由于程序必须计算所有3个求值,因此(2)有一个小的性能损失。我还将count()更改为size,它们是等效的)

相关问题