Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从函数的循环中返回值?_C# - Fatal编程技术网

C# 如何从函数的循环中返回值?

C# 如何从函数的循环中返回值?,c#,C#,如果函数中有一个循环,如何从循环中返回值 在这个例子中,我使用一个循环来判断一个数字是否为素数。如果我找到了答案,那么我不希望循环继续。我只是想退 private int IsPrime (int startNumb , int endNumb) { bool bilPrima = true; for (int i = startNumb; i<= endNumb; i++) { for (int j = 2; j <= i; j++)

如果函数中有一个循环,如何从循环中返回值

在这个例子中,我使用一个循环来判断一个数字是否为素数。如果我找到了答案,那么我不希望循环继续。我只是想退

private int IsPrime (int startNumb , int endNumb)
{
    bool bilPrima = true;

    for (int i = startNumb; i<= endNumb; i++)
    {
        for (int j = 2; j <= i; j++)
        {
            if (i%j==0)
            {
                bilPrima = false;
                break;
            }
        }
        if (bilPrima)
        {
            bilPrima = true;
            return i;
        }
        else
        {
            return 0;
        }
    }
}

如果函数包含循环,但在循环完成之前可以确定函数的返回值,则只需返回返回值,函数的执行就会结束

因此,您的函数可以如下所示:

private bool IsPrime(int startNumb, int endNumb)
{
    for (int i = startNumb; i <= endNumb; i++)
    {
        for (int j = 2; j <= i; j++)
        {
            if (i % j == 0)
            {
                return false;
            }
        }
    }
    return true;
}
其中一条评论建议您可能需要返回素数列表。如果是这样的话,答案就完全不同了

您可以返回一个IEnumerable。在函数中,创建一个列表。在循环遍历值时,每次找到质数时,都将其添加到列表中。然后在函数末尾,返回列表


你可以对收益率回报做同样的事情——我只是尽量不让你负担过重

您可以使用do…while循环。在while表达式中,检查bilPrima。这个函数应该返回什么?到底是什么问题?请看此链接,您的问题不是无法从循环内部返回值。没有什么能阻止你那样做。你的逻辑有问题,这个函数总是返回0,如果你用它自己修改一个数字,它总是等于0。谢谢,但它仍然不能返回值。因为它不能隐式地将bool键入int。我应该怎么做呢?您可以将它更改为返回int而不是abool,但也可以执行相同的操作。让函数的功能和返回的内容更清晰也很好,即使这意味着给它一个更长的名称。IsPrime这个名字表明它告诉你这个数字是否是素数。要么是,要么不是。所以如果你返回一个int,它不清楚int是什么意思。此外,如果函数确定一个数字是否为素数,则不清楚为什么会有两个参数。但所有这些都是一个稍微不同的主题。有两个参数,因为我创建了一个程序来显示从起始数到结束数的一系列数字中存在的素数。那就是why@J.Din:如果要返回两个数字之间的素数列表,则应返回IEnumerable。如果调用者只需要第一个GetPrimes20,30.first,那么您甚至可以使用yield return来提供延迟执行并节省CPU能耗。