1. 重命名你的变量。
首先,如果这是作业,你会得到不好的成绩(如果你的老师很有水平),因为你的变量名没有意义(是的,即使是numberOfPrimes
也是错误的,应该被命名为requiredNumberOfPrimes
。当我看到这个变量时,我会问自己“这是他想要的数量还是他已经找到的数量?”)。
其次,这将帮助你理解你做错了什么。变量应该根据它们所代表的内容进行逻辑命名。如果你不能解释你的变量代表什么(例如a和b),那么你可能无法解释你正在做什么。
2. 查看你的循环。
for (int x = 0; x < numberOfPrimes; x++)
for循环的结构是(初始化; '是否继续?'; '每次循环执行这个')
。因此在你的循环中
- 你会一直继续,直到x等于或大于
numberOfPrimes
*
- 每次循环时,你都会将1添加到
x
。
你确定这是你想要做的吗?x
似乎代表你找到的质数数量。那么为什么不在找到质数时递增它,而不是在开始循环时递增呢?
for (int a = 2
for (int b = 2
您正在查看介于2和x
之间的每个整数,包括2和x
。对于这些整数中的每一个整数a
,您都在查看介于a
和2之间的每个整数。您将如何处理这些整数?
每次循环通过您的顶级循环(x
循环)时,您都将从头开始执行a
循环,并且每次循环通过a
循环时,您都将从头开始执行b
循环。
因此,如果x
为10,则首先运行一次a(a=2),然后再次运行a(a=2,a=3),然后再次运行a(a=2,a=3,a=4),然后......
3. 收集结果而不是将其写入控制台。
var primes = new List<int>()
这很容易。当你找到一个质数时,primes.Add(a);
。然后你就知道你已经找到了多少个质数(primes.Count
),你可以使用质数列表高效地确定下一个质数,如果需要的话,以后还可以使用该列表。