【问题标题】:C# How to compare multiple array values (strings) in if-statement?C#如何在if语句中比较多个数组值(字符串)?
【发布时间】:2017-10-04 23:06:00
【问题描述】:

我正在使用数组制作井字游戏。要查看是否有人获胜,我必须检查是否有获胜组合。 这是我的板子阵列

string[] board = new string[9] { " ", " ", " ", " ", " ", " " , " ", " ", " " };

起初,董事会是空的。然后两个玩家开始放置'X'和'O'。 但我无法比较,例如,如果第一行全是“X”。 下面的代码由于某种原因不起作用。我不知道为什么?

board[0].Equals(board[1]).Equals(board[2]).Equals("X")

我也试过board[0]==board[1]==board[2]=="X"

这是完整的 if 语句(这些是获胜组合):

if (table[0].Equals(table[1]).Equals(table[2]).Equals("X") || table[3].Equals(table[4]).Equals(table[5]).Equals("X") || table[6].Equals(table[7]).Equals(table[8]).Equals("X") ||
            table[0].Equals(table[3]).Equals(table[6]).Equals("X") || table[1].Equals(table[4]).Equals(table[7]).Equals("X") || table[2].Equals(table[5]).Equals(table[8]).Equals("X") ||
            table[0].Equals(table[4]).Equals(table[8]).Equals("X") || table[7].Equals(table[4]).Equals(table[3]).Equals("X"))
        {
            return true;
        }

【问题讨论】:

  • 你不能这样堆叠语句。 board[0].Equals(board[1]) 返回一个布尔值,所以可以说它返回 true。那么你在做true.Equals(board[2]) 这没有意义
  • 完全有道理:/有什么建议吗?因为在 python 中使用 == 可以正常工作,但在 C# 中不行。
  • board[0].Equals(board[1]) 返回布尔值,然后您尝试使用 board[1] 执行 Equals,哪个字符串和该比较将始终返回 false。关于使用== 进行比较,您是否调试过代码并检查板在 0,1 和 2 位置是否有正确的值?
  • 尝试将条件更改为if(board[0] == "X" && board[1] == "X" && board[2] == "X")

标签: c# arrays compare


【解决方案1】:

在c#中,你不能使用

if (a == b == c)

相反,您必须明确:

if (a == b && b == c)

所以不是

board[0].Equals(board[1]).Equals(board[2]).Equals("X")

你必须写

board[0] == "X" && board[1] == "X" && board[2] == "X"

【讨论】:

    【解决方案2】:

    board[0].Equals(board[1]).Equals(board[2]).Equals("X") 更改为String.Equals(board[0], board[1]) && String.Equals(board[1], board[2]) && String.Equals(board[2], "X")

    这是 c# 中的documentation on comparing strings

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多