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

时间:2015-07-09 16:20:39

标签: 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,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]);
        }
    }
}

输出:

  

欢迎来到基本素数计划

3 个答案:

答案 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]>1a[0]-2-2>1false true & false

所以我们最终得到的falseTablename 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 ,所以你的循环将不再迭代(或更准确地说甚至不会开始迭代)。