所以我想用尽可能少的代码来比较数组的三个成员。这是我所做的:
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,但就是不起作用。有什么建议吗?
发布于 2018-06-09 09:01:55
您可以编写一个小函数来保持它的可读性和整洁,特别是如果您需要经常进行这种比较:
fun allEqual(vararg items: Any) : Boolean {
for(i in 1..(items.size-1)){
if(items[0] != items[i]) return false
}
return true
}
并简单地通过逗号分隔值进行调用:
allEqual(board[i][0], board[i][1], board[i][2])
发布于 2018-06-09 06:42:02
我不太了解Kotlin,但大多数*语言都不允许同时比较3个值。您的错误消息传达的是,您的代码最终会比较
“boardi等于boardi吗?”哪个是true/false (布尔值)
至
boardi,这是一个字符。
*我不知道有什么,但也许有一个是这样的。
发布于 2018-06-09 06:46:43
您已包含此条件:
if(board[i][0] == board[i][1] == board[i][2])
首先对这一点进行了比较:board[i][1] == board[i][2]
经过比较,它返回true
。在此之后,if逻辑转换为:
if(board[i][0] == true)
现在,board[i][0]
是一个char
,您试图将其与布尔值进行比较,这是不可能的。这就是你得到这个错误的原因。
您必须将逻辑更改为:
if((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]))
因此,您的代码将是:
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
}
}
https://stackoverflow.com/questions/50769139
复制相似问题