条件语句中的Java For循环问题

条件语句中的Java For循环问题,java,for-loop,conditional-statements,Java,For Loop,Conditional Statements,我试图找到给定数组中所有的素数。为此,我编写了以下代码。不知何故,它并没有像预期的那样发挥作用。 请帮我调试这个问题 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

我试图找到给定数组中所有的素数。为此,我编写了以下代码。不知何故,它并没有像预期的那样发挥作用。 请帮我调试这个问题

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]);
        }
    }
}
公共类primenbr{
公共静态void main(字符串[]args){
3 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1010 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 17 10 10 10 10 17 10 10 10 10 10 10 10 17,17,17,17,17,18 10,18,19,19 10,19,19,19,19 19,19,19 19 19 19 19 19 19 19 19 19 19,19 19 19(1,90,91,92,93,94,95,96,97),;
int Prime_标志=0;
//for循环一个接一个地继续,并检查数字是否为素数
System.out.println(“欢迎使用基本素数程序”);
对于(int j=0;j 1;j++){
素数标志=0;
//检查素数
对于(int i=2,div=(int)Math.sqrt(a[j])+1;i=2)| a[j]==2)
System.out.println(“万岁!!!这是一个素数”+a[j]);
}
}
}
输出:

欢迎来到基本素数节目


你可能想读一本书。初始化第一个循环,然后检查布尔值。在这种情况下,a[0]问题在于第一次迭代时
a[j]
小于1,因此该条件为false,并且从未进入循环

for(int j=0;j 1;j++)


但是因为
j[0]==-2
,条件的后半部分是false。

条件来迭代循环

for(int j=0; j<=99 & a[j] > 1; j++)
for(int j=0;j 1;j++)
j1
,但是
a[0]
-2
,这给我们留下了
-2>1
,它是


因此,我们最终得到了
true&false
,这是
false
,因此您的循环将不再迭代(或者更准确地说,甚至不会开始迭代)。

您的问题是什么?您认为您的代码应该如何工作,以及您为什么这样认为?对不起,我对这个论坛有点陌生。我的问题是在下面的代码System.out.println(“欢迎使用基本素数程序”);对于(int j=0;j 1;j++)为什么它不进入这个for循环,虽然我是每次迭代后j的增量值。Debug是你的朋友。但是它会在每个循环中向j添加1,在第4次迭代中,它应该接受条件[3]=2。然而,同样的条件'a[j]>1',如果我把它放入下一个for循环,它会接受它并打印所有的素数。那么,为什么不在第一个循环中呢?因为[0]在第二个循环中接受它,因为在j=99之前运行第一个循环,而在这种情况下不检查[j]>1。抱歉,我花了好几次通读才明白。你会注意到-2到1在这种情况下不会被打印出来。如果你想要更高的速度,你可以使用一个主筛。这就是我在C编程课上所做的。它的速度非常快。@Andrew No.“&”是错误的运算符,它应该是“&&”。OP在其他地方也错误地使用了“&”和“|”,应该使用“&&”和“| |”。谢谢,我知道了,我问这个问题真的很惭愧。这是一个很长的时间后,我开始编码。不管怎样,很高兴有像你这样的人来帮助我们。别担心。:)我很幸运,在一个满是程序员的办公室里,他们可以指出我的简单错误。我们都做了。谢谢你,我明白了逻辑。:-)
for(int j=0; j<=99 & a[j] > 1; j++)