首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >运算符'==‘不能应用于'Boolean’和'Char‘

运算符'==‘不能应用于'Boolean’和'Char‘
EN

Stack Overflow用户
提问于 2018-06-09 06:27:46
回答 5查看 257关注 0票数 2

所以我想用尽可能少的代码来比较数组的三个成员。这是我所做的:

代码语言:javascript
复制
for(i in 0..2) {
    if(board[i][0] == board[i][1] == board[i][2]) {
        return true
    } else if(board[0][i] == board[1][i] == board[2][i]) {
        return true
    }
}

(所有的值都是字符的仅供参考),但它不起作用。我得到这个错误消息“运算符'==‘无法应用于'Boolean’和'Char'”。我也尝试过使用.equals,但就是不起作用。有什么建议吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-06-09 09:01:55

您可以编写一个小函数来保持它的可读性和整洁,特别是如果您需要经常进行这种比较:

代码语言:javascript
复制
fun allEqual(vararg items: Any) : Boolean {
    for(i in 1..(items.size-1)){
        if(items[0] != items[i]) return false
    }
    return true
}

并简单地通过逗号分隔值进行调用:

代码语言:javascript
复制
allEqual(board[i][0], board[i][1], board[i][2])
票数 4
EN

Stack Overflow用户

发布于 2018-06-09 06:42:02

我不太了解Kotlin,但大多数*语言都不允许同时比较3个值。您的错误消息传达的是,您的代码最终会比较

“boardi等于boardi吗?”哪个是true/false (布尔值)

boardi,这是一个字符。

*我不知道有什么,但也许有一个是这样的。

票数 3
EN

Stack Overflow用户

发布于 2018-06-09 06:46:43

您已包含此条件:

代码语言:javascript
复制
if(board[i][0] == board[i][1] == board[i][2])

首先对这一点进行了比较:board[i][1] == board[i][2]

经过比较,它返回true。在此之后,if逻辑转换为:

代码语言:javascript
复制
if(board[i][0] == true)

现在,board[i][0]是一个char,您试图将其与布尔值进行比较,这是不可能的。这就是你得到这个错误的原因。

您必须将逻辑更改为:

代码语言:javascript
复制
if((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]))

因此,您的代码将是:

代码语言:javascript
复制
for(i in 0..2) {
    if((board[i][0] == board[i][1]) && (board[i][1] == board[i][2])) {
        return true
    } else if((board[0][i] == board[1][i]) && (board[1][i] == board[2][i])) {
        return true
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50769139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档