[英]Why does my prime number java program not print out prime numbers?
static void primeNumbers(int n)
{
System.out.println("All the prime numbers up to "+n+" are -->\n");
boolean isPrime = true;
for(int i = 2; i < n; i++)
{
for (int j = 1; j < i; j++)
{
if(i % j == 1)
{
isPrime = true;
System.out.print(j);
}
if(i % j == 0)
{
isPrime = false;
System.out.print(" ");
}
}
}
}
在这段代码中,我试图列出直到“n”的所有质数,这是用户输入的数字。 我很困惑如何解决这个问题以产生直到 n 的所有素数。
您想测试i
是否可被 [2..i-1] 范围内的任何数字整除,如果是,则它不是素数。 您的j
循环从 1 开始,这是第一个错误。
知道一个数字何时可被另一个数字整除的测试如下: if (i % j == 0) {
(如果除法余数为零)在您的代码中,您测试是否与 1 相等。
第三件事是您在第一次迭代中做出决定(当 j 为 1 时)并始终在内部循环中打印一些内容。 您需要将逻辑从内部循环中取出。 只有当 i 不能被任何j
整除时,它才是素数。
这是您的代码的修改版本:
static void primeNumbers(int n) {
System.out.println("All the prime numbers up to "+n+" are -->\n");
for (int i = 2; i < n; i++) {
boolean isPrime = true;
for (int j = 2; j < i; j++) {
if(i % j != 0) {
isPrime = false;
}
}
if (isPrime) {
System.out.print(i, " ");
}
}
}
if (i % j == 0) {
isPrime = false;
System.out.print(" ");
}
这个 if 语句对于任何i
始终为真,因为j
从 1 开始。因此,您为每个数字 < n
和 >= 2
打印一个空格
此外, isPrime
可能是一个不必要的变量。
您的算法虽然很慢,但似乎在大多数部分都是正确的,除了您没有很好地处理边界条件这一事实。 例如 2 是一个质数,你只运行迭代到 n-1,你没有为每个数字重置 isPrime 标志,还有一些小事情。 这是一个修订后的工作版本。 尝试将其与您的进行比较,并了解您哪里做对了。
int n = 10;
System.out.println("All the prime numbers up to "+n+" are -->\n");
boolean isPrime = true;
for(int i = 2; i <= n; i++)
{
for (int j = 2; j < i; j++)
{
if(i % j == 0)
{
isPrime = false;
break;
}
}
if(isPrime) {
System.out.println(i);
}
isPrime = true;
}
不要在第二个 for 循环中将isPrime
重新设置为 true,一旦该数字不是素数,我们就知道它永远不是素数。 只需在外循环的每次迭代中将其设置为 true 一次,然后在外面进行最后的“是素数”检查。
static void isPrime(int n)
{
System.out.println("All the prime numbers up to "+n+" are -->\n");
for(int i = 2; i <= n; i++)
{
boolean isPrime = true;
for (int j = 2; j < i; j++)
{
if(i % j == 0)
{
isPrime = false;
System.out.println(i + " is not prime because " + i + " is divisible by " + j );
break;
}
}
if (isPrime){
System.out.println(i + " is prime.");
}
}
}
我在此代码中添加了一些打印件,以便您可以了解为什么逻辑的每个部分都在做它所做的事情 - 将它与您的代码进行比较,以便您了解为什么您的代码实际上并不搜索素数。
我认为这是您脚本中的逻辑问题。 你应该用循环计算从 2 到 n-1 的所有数字,这些数字是= 0 并通过测试
n%i = 0
如果计数器 = 0,则没有除法器,则为素数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.