算法的问题,为什么布尔变量声明的位置不一样会产生这样的后果?
自编一个算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?有哪位大神能指点下?
当值为105是,它不是质数,就将result赋值为flase了。也就是说if(!reslt)永远为真。。。所以一直contine.
解决的办法。就是楼上的办法了。。
引用: 引用:引用:自编一个算100到200内质数的程序,结果发现一个问题。 当程序如下时: public class TestFor3 { public static void main(String args[]) {引用: 引用: 很简单,成员变量和局部变量的概念。楼主应该理解一下这个概念,然后你就懂了 您好,可不可以说详细点? 就是你现在的是成员变量,其实也是局部变量,但你就在main方法里写,可以当成是成员变量把。那你的for循环里,和if语句里,是共享着用这个成员变量。如果把boolean声明在for循环里,那这个变量在for循环外面就不能用了,明白了吗?在for循环里,你每循环一次boolean的值都会首先是true当你的i不是质数时(result=false),你只是continue跳出来,没有将result的值设置成true,导致程序中result永远等于false,所以就一直有输出了 你讲的是一种改法,将result放到循环里面,相当于每次进入循环设置result成true, 另外一种更好的改法是:continue;之前将result=true;两种解决方法,第一种是你说的那样。另一种是在for循环里在为质数时result设为true. public class TestQuestion { 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变成false的,没有把它变成true的。 当遇到一个不是质数,它就变成false了 等你再遇到一个质数,它还是false,怎么可能输出呢? 是不是成员变量不是主要原因,主要原因是楼主逻辑没写好。 楼主要学会自己调试。 很简单,成员变量和局部变量的概念。楼主应该理解一下这个概念,然后你就懂了你的循环里面,如果为不为质数的话,result已经被设置成false了,下一轮的for循环result没有被设置成true,自然是跳出循环。引用: 自编一个算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++) { …… 你就没考虑过如果不是质数result该怎么处理吗?