抛出异常时退出循环是否可以?

Dud*_*arn 2 c# arrays

我在 Hackerrank.com 上解决了一个任务,问题是这样的:

你有一个数组。此数组包含数字。
现在输入两个数字:

  • 第一个描述一个总和
  • 第二个描述了你加在一起的索引数量(序列长度)

最后你会得到总和是你定义的数字的序列数量

例如:

你的数组是 [1, 2, 3, 4],你的总和是 3,你的序列长度是 2。
现在你取前两个索引并输出总和:[1, 2] = 3。
这等于你的总和,所以现在你已经找到了一个序列。
下一个序列是 [2, 3] = 5。这不等于 3,所以你的序列计数器保持 1。
最后一个序列是 [3, 4] = 7。这也不等于 3,最后,你找到了一个序列。

我为此编写了这段代码:

static int GetSequences(List<int> s, int d, int m)
{
    //m = segment-length
    //d = sum

    int count = 0;
    int j = 0;
    int k = 0; 

    do
    {
        try
        {
            List<int> temp = new List<int>();

            for (int i = 0; i < m; i++)
            {
                temp.Add(s[i + k]);
            }
            if (temp.Sum() == d)
            {
                count++;
            }
            j++;
            k++;
        }
        catch (ArgumentOutOfRangeException)
        {
            break;
        }

    } while (true);

    return count;
}
Run Code Online (Sandbox Code Playgroud)

因为我不知道我必须多久计算一次
(例如,序列长度为 3 的 6-Length-Array 有 4 个序列 (1,2,3 | 2,3,4 | 3,4,5 | 4,5,6)),当索引超出范围时,
我将停止while循环。但我不确定这个解决方案是否合适。不仅与程序速度有关,而且与代码的清洁度有关。这段代码是否可以接受,还是使用for循环更好,例如,对于具有 3 长度序列的 6 长度数组,该循环恰好循环 4 次?

Slo*_*rio 5

不推荐,不。异常应该保留给不应该发生的事情,而不是流控制或验证。

您想要的是使用条件逻辑(if 语句)和break关键字。

此外,codereview.stackexchange.com 更适合解决此类问题。