今天遇到的一个求素数的方法,有一段一直看不明白:
class PrimeNumber{
int count = 0;
int number = 2;
public void isPrime(){
while(count<50){
boolean isPrime = true;
for(int divisor = 2; divisor <= number/2; divisor++){
if(number % divisor == 0){
isPrime = false;
break;
}
}
if(isPrime){
count++;
System.out.print(number + ",");
}
number++;
}
}
其中for loop的那一段,既然当number % divisor == 0的时候就是false,即退出了for loop,那么一开始number=2的时候number % divisor == 0也是成立的,那么isPrime也就为false了,但为啥最后输出结果里面还有2呢?
本人刚出道的菜鸟,还望有人指点迷津,谢过了~~
class PrimeNumber{
int count = 0;
int number = 2;
public void isPrime(){
while(count<50){
boolean isPrime = true;
for(int divisor = 2; divisor <= number/2; divisor++){
if(number % divisor == 0){
isPrime = false;
break;
}
}
if(isPrime){
count++;
System.out.print(number + ",");
}
number++;
}
}
其中for loop的那一段,既然当number % divisor == 0的时候就是false,即退出了for loop,那么一开始number=2的时候number % divisor == 0也是成立的,那么isPrime也就为false了,但为啥最后输出结果里面还有2呢?
本人刚出道的菜鸟,还望有人指点迷津,谢过了~~
解决方案 »
- java中如何实现多线程对同一文件的读和写
- rar文件上传到数据库的问题
- java提取excel数据以word形式打印??(有哪位高手进来解答一下)
- 想做一个隔一定时间轮换图片的程序!请大虾指点思路!!
- 关于界面中不同控件事件方法的先后顺序
- 关于session存储对象的类型转换问题,在线等待
- 初学jsp+oracle该装哪一个oracle
- 求大神帮忙:java带pfx证书获取https内容
- 有没有删除JPanel和JLabel的方法啊?
- 点击JB中的Database组件的conection属性的时候(准备连接sql server),怎么会没有反应?
- 一行一个数字,求最快的读取方法
- 依旧是synchronized修饰函数的问题
当number=2时,对于上述条件divisor<=number/2即是2<=1,很明显这是不成立的,所以之后就没有进入循环啊,所以现在isPrime还是为true,所以2也被输出来了。
而for()循环是for(int divisor = 2; divisor <= number/2; divisor++)
divisor=2开始,因此当number=2时,不经for()循环,直接输出。