debugging C#使两个护林员相交,但行为不符合预期

wa7juj8i  于 2022-12-13  发布在  C#
关注(0)|答案(1)|浏览(135)

我尝试使用两个列表来确定列表是否相交。x1c 0d1x就我所知,范围1不应与范围2相交,所以它应该吐出一个空的列表。2然而,正如你在列表中看到的,我得到的数字甚至从来没有包括在提供的两个范围内。3我做错了什么还是这是一个奇怪的bug?我已经把这个喂给了OpenAI聊天机器人,它也同意我的看法,这不应该发生。(顺便说一句,很酷的机器人)。
感谢您的帮助!
代码:

public void Challenge2()
    {
        List<(Int32 min1, Int32 max1, Int32 min2, Int32 max2)> _numbers = new(){(64, 67, 43, 63)};
        Int32 count = 0;
        foreach ((Int32 min1, Int32 max1, Int32 min2, Int32 max2) in _numbers)
        {
            //if (min1 <= max2 && max2 > min2 || min2 <= max1 && max1 > min1)
            var s = Enumerable.Intersect(Enumerable.Range(min1, max1), Enumerable.Range(min2, max2));
            if (Enumerable.Intersect(Enumerable.Range(min1, max1), Enumerable.Range(min2, max2)).Any())
            {
                count++;
            }
        }
    }
w6mmgewl

w6mmgewl1#

我认为这里的基本问题是你对Enumerable.Range参数的理解。如果你看the documentation for Enumerable.Range(Int32, Int32),你会发现第一个int参数是start数字,第二个int参数是count。因此,你应该像这样创建你的范围:

var intersection = Enumerable.Intersect(
    Enumerable.Range(min1, max1 - min1 + 1), 
    Enumerable.Range(min2, max2 - min2 + 1));

另外,也不需要计算两次(在if条件下进行第二次计算)。我不清楚count变量应该表示什么,但可能适用以下情况之一:

if (intersection.Any())
{
    count++;
}

// Or just:
int count = intersection.Count();

相关问题