黑马程序员技术交流社区

标题: 求素数的和,关于flag的问题。 [打印本页]

作者: 崔龙飞    时间: 2013-6-29 13:30
标题: 求素数的和,关于flag的问题。



作者: 崔龙飞    时间: 2013-6-29 13:35
两个问题
1、boolean flag = true;为什么定义flag?
2、flag = true;这里怎么还是flag = true?
总之一句话:不懂flag,超级郁闷。
最好能详细解释解释,多谢啦。
作者: 崔龙飞    时间: 2013-6-29 13:37
看了及ian关于flag的帖子,百度了很多,还是不懂,彻底对我的智商无语了。
作者: oxf974025918    时间: 2013-6-29 13:49
flag是一个布尔变量不要为此纠结,定义a也行的,定了变量要先赋值后执行,布尔值默认为false。你的代码有两层循环,外循环里面设置为true,做为标记,每内循环一次标记改为true,内循环里面设为false,表示不是质素,你要找的是质素,既然不是质素就不要再循环下去继续下一个循环。下一循环又设置为true,再进行判断。最后if判断是判断如果flag是true也就是质素就打印出来。。。懂了没有?自己一步一步套一下。
作者: 王磊    时间: 2013-6-29 13:51
定义flag就是定义了一个判断素数的标记,外循环遍历100内的所有数字,进入内循环对每一个数进行是否是素数判断,如果是i是素数(i%j != 0),那就能通过if对flag的判断,并打印这个素数i。

如果i不是素数,就会将标记flag赋值为false,这样下面打印语句就不会执行,重新进行外循环,但必须要在将标记flag改写为true,才可以对下次的判断为素数时执行打印语句。
作者: 崔龙飞    时间: 2013-6-29 14:38
oxf974025918 发表于 2013-6-29 13:49
flag是一个布尔变量不要为此纠结,定义a也行的,定了变量要先赋值后执行,布尔值默认为false。你的代码有两 ...

谢了啊朋友,讲的很详细。我自己再好好琢磨琢磨,零基础的人对计算机语言理解起来真是费劲,多谢指点。
作者: 崔龙飞    时间: 2013-6-29 14:42
王磊 发表于 2013-6-29 13:51
定义flag就是定义了一个判断素数的标记,外循环遍历100内的所有数字,进入内循环对每一个数进行是否是素数 ...

我就是一会儿循环,一会儿flag的给绕晕了,我算是半道转行以前没接触过计算机语言,还是不熟悉啊,谢谢指点。
作者: 王磊    时间: 2013-6-29 15:00
崔龙飞 发表于 2013-6-29 14:42
我就是一会儿循环,一会儿flag的给绕晕了,我算是半道转行以前没接触过计算机语言,还是不熟悉啊,谢谢指 ...

其实很好理解,你可以简单的了解,循环就是一遍一遍的读,按照这个顺序花点时间把2~10这几个数带进去实际算一下就能理解了。flag其实就可以当做一个标记,至于它的值,就当做它告诉你数字是不是素数就行了。
作者: 王广亚    时间: 2013-6-29 15:42
  1. public class SuShu{
  2. public static void main(String[] args){
  3.   prinSuShu(100);
  4. }
  5. public static void prinSuShu(int x) {
  6.   boolean flag=true;     //此处定义一个boolean类型的变量并赋值为true,是为了下面判断是否为素数而打基础的。
  7.                                       //如果是素数flag=true,如果不是flag=false;
  8.   for(int i=2;i<=x;i++){    //因为此题是输出x以内的所有素数,所以要从2开始一直判断到x为止,此处的i就是要判断的数。
  9.    flag=true;                   //为什么flag=true,而不是flag=false呢?
  10.                                 //因为先假如它是素数。
  11.    for(int j=2;j<=x;j++){        //这个for循环是判断这个数是不是素数的。
  12.     if(i%j==0){               //如果i能整出j,就说明他不是素数
  13.      flag=false;          //既然不是素数了,那么也不必flag=true,所以flag=false
  14.      break;               //然后跳出这个for(int j=2;j<=x;j++)循环。重新到for(int i=2;i<=x;i++)再判断下一个数。
  15.     }
  16.    }
  17.    if(flag){                    //你的迷惑在这,上面说了是素数flag=true,不是flag=false。既然是素数是不是要把它输出啊。
  18.     System.out.print(i);
  19.    }
  20.   }
  21.   
  22. }

  23. }
  24. <p> </p>
复制代码

作者: 崔龙飞    时间: 2013-6-30 16:05
王广亚 发表于 2013-6-29 15:42

这个就更详细了,多谢细心指点,呵呵,现在已经没有问题了。
作者: 崔龙飞    时间: 2013-6-30 16:31
崔龙飞 发表于 2013-6-30 16:05
这个就更详细了,多谢细心指点,呵呵,现在已经没有问题了。

对了,我不在你的代码06行中定义flag,直接在09行中boolean flag = true,我刚试了下结果和之前的一样,我觉得这两行代码有些重复。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2