[英]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);
这是我看到的问题
您甚至都没有打印输出。
(int)java.lang.Math.sqrt(5)
最终将截断为2
。 您应该将1加到平方根,因为如果您没有足够的迭代,这将是一个问题,但是如果您进行了过多的迭代,这将不是问题。
当您找到质数时, for
循环将结束,而while(false)
将终止do-while循环
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.