繁体   English   中英

标为“继续”的标签似乎无效

[英]Labelled “continue” doesn't seem to work

刚开始学习Java,我不明白我的代码有什么问题。 PrimeIterator应该生成无限数量的质数(从3开始),但是当我打印输出时,得到: 3、5、7、9、11、13、15等。

public class Prime {

    PrimeIterator iter = new PrimeIterator();

    private class PrimeIterator implements java.util.Iterator<Integer>
    {
        int numb = 1;

        public boolean hasNext() 
        {
            return true;
        }

        public Integer next() 
        {
            nextCandidate:
            do{
                numb += 2;
                int numbSqrt = (int)java.lang.Math.sqrt(numb);

                for (int i = 3; i <= numbSqrt; i = i+2)
                {
                    if (numb % i == 0)
                    {
                        continue nextCandidate;
                    }
                }
            }while(false);
            return numb;
        }

        public void remove() {}
    }

    void printPrimes()
    {
        System.out.print(2);
        while(iter.hasNext())
        {
            try 
            {
                Thread.sleep(500);
            } catch (InterruptedException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            System.out.print(", " + iter.next());   
        }
    }
}

我想在我的do-while循环中使用标记为“ continue”的语句。 但是我的直觉告诉我我使用不正确。

问题在于while(false)延续条件。 作为do while(false)语句,这意味着它永远不会循环超过一次。 也就是说,当您尝试将执行跳转到带标签的语句时,由于不会验证继续条件( false ),因此不会再次在do while循环,即使您认为continue会再次使执行循环。

因此,每次执行next()方法时,它绝不会使numb增加次数超过一次。

我会做如下的事情:

nextCandidate:
do{
    numb += 2;
    int numbSqrt = (int)java.lang.Math.sqrt(numb);

    for (int i = 3; i <= numbSqrt; i = i+2)
    {
        if (numb % i == 0)
        {
            continue nextCandidate;
        }
    }
    break;

}while(true);

这是我看到的问题

  1. 您甚至都没有打印输出。

  2. (int)java.lang.Math.sqrt(5)最终将截断为2 您应该将1加到平方根,因为如果您没有足够的迭代,这将是一个问题,但是如果您进行了过多的迭代,这将不是问题。

  3. 当您找到质数时, for循环将结束,而while(false)将终止do-while循环

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM