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

C#数组重复项检测方法?Yahtzee游戏Fullhouse等牌型判断求助

Yahtzee牌型检测与数组重复项处理方案

先修正你现有代码的问题

你的代码存在类型不匹配的低级错误:数组是string[]却用int类型的1做Contains判断,foreach循环又用int遍历字符串数组,还和字符串"1"对比,同时num变量未初始化。修正后的数字计数逻辑应该是这样:

// 先统一转成int数组,避免类型混乱
int[] numbers = { int.Parse(number1), int.Parse(number2), int.Parse(number3), int.Parse(number4), int.Parse(number5) };

// 统计数字1的出现次数
int count1 = 0;
foreach (int num in numbers)
{
    if (num == 1) count1++;
}
// 用LINQ可以更简洁:int count1 = numbers.Count(n => n == 1);

C#搜索数组重复项的核心方法

检测Yahtzee牌型的核心是统计每个数字的出现频次,常用两种实现方式:

1. 手动用Dictionary统计

适合不想用LINQ的场景,逻辑清晰:

Dictionary<int, int> frequency = new Dictionary<int, int>();
foreach (int num in numbers)
{
    if (frequency.ContainsKey(num))
        frequency[num]++;
    else
        frequency[num] = 1;
}
// 键=骰子数字,值=该数字出现的次数

2. 用LINQ的GroupBy(更简洁)

一行代码搞定频次分组,.NET Framework 3.5及以上支持:

var frequencyGroups = numbers.GroupBy(n => n)
                             .Select(g => new { Number = g.Key, Count = g.Count() })
                             .ToList();

三种目标牌型的检测逻辑

基于上面的频次统计,就能轻松实现牌型判断:

Three of a Kind(三条)

只要存在任意数字出现次数≥3:

// Dictionary版本
bool isThreeOfAKind = frequency.Any(kv => kv.Value >= 3);
// GroupBy版本
bool isThreeOfAKind = frequencyGroups.Any(g => g.Count >= 3);

Four of a Kind(四条)

只要存在任意数字出现次数≥4:

bool isFourOfAKind = frequency.Any(kv => kv.Value >= 4);

Fullhouse(满堂红)

必须满足两个条件:只有两种不同数字,且其中一种出现3次、另一种出现2次(顺序无关):

// Dictionary版本
bool isFullHouse = frequency.Count == 2 
                   && frequency.Values.Contains(3) 
                   && frequency.Values.Contains(2);
// GroupBy版本(更严谨,避免出现4+1的情况)
bool isFullHouse = frequencyGroups.Count == 2 
                   && frequencyGroups.Select(g => g.Count)
                                     .OrderBy(c => c)
                                     .SequenceEqual(new[] {2, 3});

完整示例代码

把所有逻辑整合起来的可运行示例:

// 模拟输入的骰子值(实际可从UI或用户输入获取)
string input1 = "3", input2 = "3", input3 = "3", input4 = "5", input5 = "5";
int[] numbers = { int.Parse(input1), int.Parse(input2), int.Parse(input3), int.Parse(input4), int.Parse(input5) };

// 统计频次
var frequency = numbers.GroupBy(n => n)
                       .ToDictionary(g => g.Key, g => g.Count());

// 检测牌型
bool threeOfAKind = frequency.Any(kv => kv.Value >= 3);
bool fourOfAKind = frequency.Any(kv => kv.Value >= 4);
bool fullHouse = frequency.Count == 2 && frequency.Values.Contains(2) && frequency.Values.Contains(3);

// 输出结果
Console.WriteLine($"三条:{threeOfAKind}");
Console.WriteLine($"四条:{fourOfAKind}");
Console.WriteLine($"满堂红:{fullHouse}");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:06:41