c#不是所有的代码路径都返回值.在给定范围内获取所有素数的方法不起作用



我正在学习c#,我正在努力完成一项任务。
我试着写一个程序,请求一个数字范围,并返回所有素数。

但是我总是得到错误:

不是所有的代码路径都返回值

首先,我做了一个函数来检查一个给定的数字是否是素数,它似乎工作,下面是代码:

public bool IsPrime(int theNumber)
{
for(int i = 2; i <= (theNumber/2)+1; i++)
{
if(theNumber%i == 0)
{
return false;
}
}
return true;

现在我想在for循环中循环它,并返回该范围内的所有素数…但是它不工作。

似乎问题是,如果布尔值为假,我缺少return语句。但显然,如果我的第一个方法isPrime(int theNumber)返回false,我不想要return

这是我的代码:

public int AllPrimesInRange(int lowerEdge, int upperEdge)
{
for(int i = lowerEdge; i <= upperEdge; i++)
{
if (IsPrime(i))
{
return i;
}              
}

我希望有人能帮助我…提前谢谢你。

似乎你想要一个IEnumerable<int>:

理想情况下,如果没有质数

,我希望它什么也不返回

让我们实现它:

public IEnumerable<int> AllPrimesInRange(int lowerEdge, int upperEdge) {
lowerEdge = Math.Max(lowerEdge, 2);
// Special Case - 2 - the only even prime
if (lowerEdge == 2 && upperEdge >= lowerEdge)
yield return 2; 
// Nearest odd int (2 -> 3, 146 -> 147 etc.)
lowerEdge = (lowerEdge / 2 * 2 + 1); 
for (int number = lowerEdge; number <= upperEdge; number += 2) 
if (IsPrime(number))
yield return number;
}

使用

foreach (int number in AllPrimesInRange(35, 145)) {
Console.WriteLine(number);  
}

注意,与return不同,该方法很可能不返回任何值,即yield return永远不会执行。

小提琴

最新更新