我试图找到给定数组中的所有素数。为此,我写了以下代码。不知何故,它没有按预期工作。 请帮我调试一下这个问题。
public class primenbr {
public static void main(String[] args) {
int a[]= { -2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97};
int Prime_flag=0;
//for loop to keep going one by one and to check if the number is prime
System.out.println("welcome to Basic prime number program");
for(int j=0;j<=99 & a[j] > 1;j++) {
Prime_flag=0;
//checks for prime number
for(int i=2,div=(int) Math.sqrt(a[j]) + 1; i <= div;i++){
if (a[j]%i==0){
Prime_flag++;
}
}
if ((Prime_flag == 0 & a[j] >= 2) | a[j] == 2)
System.out.println("Hurray!!! This is a prime number"+a[j]);
}
}
}
输出:
欢迎来到基本素数计划
答案 0 :(得分:0)
您可能想要阅读 for loop。初始化第一个循环,然后检查布尔值。在这种情况下,a [0] <1,因为a [0]是-2。您需要将条件更改为大于1或在初始化集初始化中更改为a.length-1。
你的第一个循环应该是这样的。
for(j=a.length-1;a[j] > 1 && j>=0;j--)
答案 1 :(得分:0)
问题是a[j]
在第一次迭代时小于1,因此条件为false,并且永远不会输入循环。
for(int j=0;j<=99 & a[j] > 1;j++)
但是因为j[0] == -2
,条件的后半部分是假的。
答案 2 :(得分:0)
迭代循环的条件
for(int j=0; j<=99 & a[j] > 1; j++)
是j<=99 & a[j]
。
您已将j
初始化为0
,因此j<=99
部分为true
,但问题在于此情况的第二部分。
j=0
条件a[j]>1
变为a[0]>1
,a[0]
为-2
,-2>1
为false
true & false
。
所以我们最终得到的false
是Tablename
id coid name test passfail testdate
VALUES
1 1 Chris mod1 fail 2015-05-20
2 1 Chris mod1 pass 2015-05-25
3 2 Patrick mod1 fail 2015-06-10
4 3 James mod1 2015-12-21
5 4 Agnes mod1 cancelled 2015-07-01
6 5 Freya mod1 pass 2015-07-01
7 5 Freya mod2 pass 2015-07-05
,所以你的循环将不再迭代(或更准确地说甚至不会开始迭代)。