【问题标题】:Java For loop Issue in condition statement条件语句中的Java For循环问题
【发布时间】:2015-09-28 03:46:03
【问题描述】:

我试图在给定数组中找到我们所有的素数。为此,我编写了以下代码。不知何故,它没有按预期工作。 请帮我调试问题。

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]);
        }
    }
}

输出:

欢迎来到基本素数程序

【问题讨论】:

  • 你有什么问题?
  • 你认为你的代码应该如何工作,你为什么这么认为?
  • 对不起,我是这个论坛的新手。我的问题在下面的代码 System.out.println("welcome to Basic prime number program"); for(int j=0;j 1;j++) 为什么它没有进入这个 for 循环,尽管我在每次迭代后都会增加 J 的值。
  • 调试是你的朋友。

标签: java for-loop conditional-statements


【解决方案1】:

迭代循环的条件

for(int j=0; j<=99 & a[j] > 1; j++)

j&lt;=99 &amp; a[j]

您将j 初始化为0,所以j&lt;=99 部分是true,但问题出在此条件的第二部分。
对于j=0,条件a[j]&gt;1 变为a[0]&gt;1,但a[0]-2,这给我们留下了-2&gt;1,即false

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

【讨论】:

  • 谢谢 Pshemo,我明白了。 :-)
【解决方案2】:

问题是a[j]在第一次迭代时小于1,所以条件为假,永远不会进入循环。

for(int j=0;j&lt;=99 &amp; a[j] &gt; 1;j++)

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

【讨论】:

  • 谢谢我明白了,我真的为自己问这个问题感到羞耻。过了很长时间,我才开始编码。不管怎样,很高兴有像你这样的人来帮助我们。
  • 不用担心。 :) 我很幸运能在一个充满程序员的办公室里指出我的简单错误。我们都制造它们。
【解决方案3】:

您可能想阅读 for loop。您的第一个循环已初始化,然后检查布尔值。在这种情况下,a[0]

您的第一个循环应该如下所示。

for(j=a.length-1;a[j] > 1 && j>=0;j--)

【讨论】:

  • 但它会在每个循环中向 j 添加 1,并且在第 4 次迭代期间它应该接受条件为 a[3] = 2。但是,相同的条件 'a[j] > 1',如果我放入下一个 for 循环,它会接受它并打印所有素数。那么,为什么不先呢。
  • 因为 a[0]
  • 它在第二个循环中接受它,因为您正在运行第一个循环直到 j= 99 并且在这种情况下不检查 a[j] >1。很抱歉,它需要通读几遍才能做到这一点。您会注意到在这种情况下不会打印出 -2 到 1。
  • 如果您想要更快的速度,您可以使用初筛。这就是我在 C 编程课上所做的。它非常快。
  • @Andrew 不-“&”是错误的运算符,它应该是“&&”。 OP 也错误地使用了“&”和“|”其他地方,其中“&&”和“||”应该使用。
猜你喜欢
  • 2018-05-27
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 2022-11-26
相关资源
最近更新 更多