日期:2014-05-20  浏览次数:20716 次

算法的问题,为什么布尔变量声明的位置不一样会产生这样的后果?
自编一个算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?有哪位大神能指点下?

------解决方案--------------------
引用:
自编一个算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该怎么处理吗?
------解决方案--------------------
很简单,成员变量和局部变量的概念。楼主应该理解一下这个概念,然后你就懂了
------解决方案--------------------
引用:
引用:
很简单,成员变量和局部变量的概念。楼主应该理解一下这个概念,然后你就懂了
您好,可不可以说详细点?

就是你现在的是成员变量,其实也是局部变量,但你就在main方法里写,可以当成是成员变量把。那你的for循环里,和if语句里,是共享着用这个成员变量。如果把boolean声明在for循环里,那这个变量在for循环外面就不能用了,明白了吗?在for循环里,你每循环一次boolean的值都会首先是true
------解决方案--------------------
你的整个循环里面只有把result变成false的,没有把它变成true的。
当遇到一个不是质数,它就变成false了
等你再遇到一个质数,它还是false,怎么可能输出呢?

是不是成员变量不是主要原因,主要原因是楼主逻辑没写好。
楼主要学会自己调试。

------解决方案--------------------
你的循环里面,如果为不为质数的话,result已经被设置成false了,下一轮的for循环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);
}
}
}

------解决方案--------------------
当值为105是,它不是质数,就将result赋值为flase了。也就是说if(!reslt)永远为真。。。所以一直contine.
    解决的办法。就是楼上的办法了。。
------解决方案--------------------
当你的i不是质数时(result=false),你只是continue跳出来,没有将result的值设置成true,导致程序中result永远等于false,所以就一直有输出了
你讲的是一种改法,将result放到循环里面,相当于每次进入循环设置result成true,
另外一种更好的改法是:continue;之前将result=true;
------解决方案--------------------
引用:
引用:引用:自编一个算100到200内质数的程序,结果发现一个问题。
当程序如下时:
public class TestFor3 {
public static void main(String args[]) {