我想打印前100个素数。所以,我创建了一个int 100数组。我添加了第一个prime,bag [0] = 2,然后对于以下数字,我试着编写一个算法。它将从3开始并继续直到阵列已满。如果数字是否可以被数组中的前一个元素整除,那么每个数字都被确定为是素数,如果它是素数,那么它将被添加到数组中。
这是我的代码:
public class Trial02
{
public static void main( String[] args)
{
int[] bag = new int[100];
bag[0] = 2; //first element of prime array
int valid = 1;
int i;
boolean result = true;
String str = "";
//starting from 3 it checks if a number is prime until array is full
for( i=3; valid<bag.length; i++)
{
//it checks if previous primes in array are divisible by current number until coming to current number
for(int k=0; k<valid; k++)
{
if( i % bag[k] == 0)
result = false;
}
if( result == true) //if it is prime it is added to array
{
bag[valid] = i;
valid ++;
}
}
//printing results
for(int m=0; m < bag.length; m++)
str = str + bag[m] + " ";
System.out.println("zaa xd");
System.out.println(str);
}
}
但它不提供任何输出,只是一个空白。我无法找到我的错误所在。 提前谢谢。
答案 0 :(得分:2)
你从来没有真正检查一个数字是否为素数(result
没有设置在任何有用的地方)
答案 1 :(得分:2)
您似乎需要在第一个result = true;
循环内重置for
。您的代码已过帐设置result = false
,然后永远不会更改它。
答案 2 :(得分:2)
最明显的错误是您的boolean result = true;
不在循环中:一旦设置为false
,它就永远不会被设置回true
。 您看不到任何输出,因为您的程序永远不会停止。
作为旁注,您不需要检查所有素数到你发现的最后一个素数:一旦到达候选素数的平方根,即i*i > bag[k]
,就可以停止。当你的限制为100时,你不会注意到任何效果,但是如果你尝试100000,它会有很多帮助。
答案 3 :(得分:0)
您的代码中存在许多逻辑错误。
首先,你有一个for循环,其终结案例与其索引器无关。虽然这是有效的,但它使代码更难理解。
更重要的是,结果只会被设置为false,而不是true,因此循环将永远运行,因为有效性永远不会改变。
答案 4 :(得分:0)
确定前100个素数的逻辑是不正确的。并且存在多个逻辑错误,如其他人所示。我重写了你的代码,但没有经过测试。我想它会起作用:
public class Trial02
{
public static void main( String[] args)
{
int[] bag = new int[100];
bag[0] = 2; //first element of prime array
int valid = 1;
int i;
boolean isPrime = true;
String str = "";
//starting from 3 it checks if a number is prime until array is full
for( i=3; valid<bag.length; i++)
{
isPrime = true;
for (int k = 2; k < i; k++)
{
if (i % k == 0)
{
isPrime = false;
break;
}
}
if (isPrime == true)
{
bag[valid++] = i;
}
}
//printing results
for(i=0; i < bag.length; i++)
str = str + bag[i] + " ";
System.out.println("zaa xd");
System.out.println(str);
}
}