提问人:Angelos Makrygiannis 提问时间:4/3/2023 最后编辑:GSergAngelos Makrygiannis 更新时间:4/3/2023 访问量:59
C# 并非所有代码路径都返回值。获取给定范围内所有素数的方法不起作用 [重复]
C# not all code paths return a value. Method to get all prime numbers in given range is not working [duplicate]
问:
我正在学习 C#,但我正在为一项任务而苦苦挣扎。
我尝试编写一个程序,它要求一个数字范围,并返回所有质数。
但是,我总是收到错误:
并非所有代码路径都返回值
首先,我制作了一个函数来检查给定的数字是否是质数,它似乎有效,代码如下:
public bool IsPrime(int theNumber)
{
for(int i = 2; i <= (theNumber/2)+1; i++)
{
if(theNumber%i == 0)
{
return false;
}
}
return true;
现在我想循环它,并返回该范围内的所有质数......但这行不通。for
似乎问题是我缺少一个语句,以防 if 布尔值为 false。但显然,如果我的第一个方法返回 false,我不想要一个。return
return
isPrime(int theNumber)
这是我拥有的代码:
public int AllPrimesInRange(int lowerEdge, int upperEdge)
{
for(int i = lowerEdge; i <= upperEdge; i++)
{
if (IsPrime(i))
{
return i;
}
}
我希望有人能帮助我。先谢谢你。
答:
0赞
Dmitry Bychenko
4/3/2023
#1
看来你想要一个: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
评论
AllPrimesInRange
lowerEdge
upperEdge