自编一个算100到200内质数的程序,结果发现一个问题。
当程序如下时:
public class TestFor3 {
public static void main(String args[]) {
boolean result = true;
for (int i=101;i<=200;i+=2) {
for(int f=2;f<i;f++) {
if(i % f == 0) {
result = false;
break;
}
}
if (!result) {continue;}
System.out.println("100到200内的质数有:" + i);
}
}
}
得出的结果是:
100到200内的质数有:101
100到200内的质数有:103
然后将“boolean result = true;”放到此语句的for循环里面,结果就是正确的,这到底是怎么回事?为什么那个位置计算的值只有101和103?有哪位大神能指点下?
当程序如下时:
public class TestFor3 {
public static void main(String args[]) {
boolean result = true;
for (int i=101;i<=200;i+=2) {
for(int f=2;f<i;f++) {
if(i % f == 0) {
result = false;
break;
}
}
if (!result) {continue;}
System.out.println("100到200内的质数有:" + i);
}
}
}
得出的结果是:
100到200内的质数有:101
100到200内的质数有:103
然后将“boolean result = true;”放到此语句的for循环里面,结果就是正确的,这到底是怎么回事?为什么那个位置计算的值只有101和103?有哪位大神能指点下?
当遇到一个不是质数,它就变成false了
等你再遇到一个质数,它还是false,怎么可能输出呢?是不是成员变量不是主要原因,主要原因是楼主逻辑没写好。
楼主要学会自己调试。
public static void main(String args[]) {
boolean result = true;//注意这里只有在初始化的时候设成了true
for (int i=101;i<=200;i+=2) {
for(int f=2;f<i;f++) {
if(i % f == 0) {
result = false;
break;
}
else{
result = true; //注意到了没有,你在for循环里只有把result设为false,而没有把他设为true.
}
}
if (!result) {continue;}
System.out.println("100到200内的质数有:" + i);
}
}
}
解决的办法。就是楼上的办法了。。
你讲的是一种改法,将result放到循环里面,相当于每次进入循环设置result成true,
另外一种更好的改法是:continue;之前将result=true;