You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

3x3 Bingo游戏C#代码异常:应输出line却返回nothing

问题诊断与解决方法

根据你描述的场景,程序应该输出line但实际返回nothing,大概率是以下几个常见问题导致的,逐一排查即可:

1. 抽取数字的解析错误

你提供的抽取数字用了中文顿号(、),如果代码中直接用英文逗号(,)分割字符串,会导致无法正确拆分数字,最终抽取集合中没有正确的数字,自然无法匹配卡片上的行。

解决方法:
解析抽取数字时,先将中文顿号替换为英文逗号,再拆分转换为整数集合,推荐使用HashSet<int>来存储抽取数字,因为它的Contains方法查找效率远高于List<int>:

string drawnInput = "1、2、3、4、5、6、7、8、10、11、12、13、14、15、16";
HashSet<int> drawnNumbers = new HashSet<int>(
    drawnInput.Replace("、", ",").Split(',')
              .Select(str => int.Parse(str.Trim()))
);

2. 行匹配逻辑错误

如果代码中判断行是否完成的逻辑有误,比如只检查了行内部分数字是否存在,而非全部三个数字,就会漏掉第一行的匹配。

正确的行匹配逻辑:
遍历卡片的每一行,对每行的三个数字逐一检查是否都在抽取集合中,只要有一行满足条件,就标记为hasLine:

bool hasLine = false;
foreach (var row in bingoCard)
{
    bool isLineComplete = true;
    foreach (int num in row)
    {
        if (!drawnNumbers.Contains(num))
        {
            isLineComplete = false;
            break;
        }
    }
    if (isLineComplete)
    {
        hasLine = true;
        break;
    }
}

3. Bingo与Line的优先级顺序错误

必须先判断是否达成bingo(所有数字都在抽取集合中),再判断是否有line,避免逻辑顺序颠倒导致错误输出。

完整的判断流程示例:

// 初始化Bingo卡片
int[][] bingoCard = new int[][]
{
    new int[] {1, 2, 3},
    new int[] {90, 91, 92},
    new int[] {93, 94, 95}
};

// 解析抽取数字
string drawnInput = "1、2、3、4、5、6、7、8、10、11、12、13、14、15、16";
HashSet<int> drawnNumbers = new HashSet<int>(
    drawnInput.Replace("、", ",").Split(',')
              .Select(str => int.Parse(str.Trim()))
);

// 判断是否Bingo
bool isBingo = true;
foreach (var row in bingoCard)
{
    foreach (int num in row)
    {
        if (!drawnNumbers.Contains(num))
        {
            isBingo = false;
            break;
        }
    }
    if (!isBingo) break;
}

// 判断是否有Line
bool hasLine = false;
foreach (var row in bingoCard)
{
    bool isLineComplete = true;
    foreach (int num in row)
    {
        if (!drawnNumbers.Contains(num))
        {
            isLineComplete = false;
            break;
        }
    }
    if (isLineComplete)
    {
        hasLine = true;
        break;
    }
}

// 输出结果
if (isBingo)
{
    Console.WriteLine("bingo");
}
else if (hasLine)
{
    Console.WriteLine("line");
}
else
{
    Console.WriteLine("nothing");
}

快速排查步骤

  1. 打印抽取数字集合,确认里面包含1、2、3这三个数字;
  2. 单独测试第一行的匹配逻辑,看是否能正确识别该行已完成;
  3. 检查Bingo判断逻辑是否会错误地覆盖Line的判断。

内容的提问来源于stack exchange,提问作者Dragos Bogdan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:20:31