黑马程序员技术交流社区

标题: for循环问题? [打印本页]

作者: 张钧杰    时间: 2012-11-3 21:28
标题: for循环问题?
本帖最后由 张钧杰 于 2012-11-4 21:54 编辑

1、判断一个数是不是素数?
代码为:
class  ShuSuTest
{
        public static void main(String[] args)
        {
                int x = 7;
                boolean flag = true;        
                for (int y =2; y <x ; y++)
                        {
                                if (x%y==0 )
                                        {
                                                flag = false;
                                                        System.out.print(x+"不是素数");
                                                break ;
                                        }
                        }
                if (flag)
                        {
                                System.out.print(x+"是素数");
                        }
               
        }
}
输出结果7是素数。
我想问的是,输出10,到50间的素数。代码如下。为什么,输出什么都没有??
class  ShuSuTest1
{
        public static void main(String[] args)
        {
               
                boolean flag = true;        
                for (int x = 10; x <50 ; x++)
                {
               
                        for (int y =2; y <x ; y++)
                        {
                                if (x%y==0 )
                                        {
                                                flag = false;
                                                        //System.out.print(x+" ");
                                                break ;
                                        }
                        }
                        if (flag)
                        {
                                System.out.print(x+"是素数");
                        }
                }
        }
}
输出结果什么也没有,为什么啊。。我指定一个数。可以判断素数,循环一组条件就行了是,是什么情况,苦恼好久了!


作者: 朱宏青    时间: 2012-11-3 21:36
本帖最后由 qwepoidjdj 于 2012-11-3 21:43 编辑

我估计是哪里出错了 我去测试下

测试后结果:
  1. class test4 {
  2.         public static void main(String[] args) {
  3.                 boolean flag = true;
  4.                 for (int x = 10; x < 50; x++) {
  5.                         flag = true;
  6.                         for (int y = 2; y < x; y++) {
  7.                                 if (x % y == 0) {
  8.                                         flag = false;
  9.                                         // System.out.print(x+" ");
  10.                                 }
  11.                         }
  12.                         if (flag) {
  13.                                 System.out.print(x + "是素数");
  14.                         }
  15.                 }
  16.         }
  17. }
复制代码
由于你就在开始的时候初始化了flag的值,之后就没变成true过,你自己看看是不是这样,应该在每次循环开始的时候默认为是true的,然后经过判断以后确认是否应该改成false。
作者: 周斌    时间: 2012-11-3 21:47
这是判断数字是否是偶数,你把flag变为false没有变回来,所以是素数是flag为false没有往下执行。
作者: 种生祥    时间: 2012-11-3 21:51
for (int x = 10; x <50 ; x++)

       boolean flag = true;  //这个放进来

作者: HeiMa-黄倲江    时间: 2012-11-3 22:05
本帖最后由 qq84995227 于 2012-11-3 22:13 编辑

for(int x = 10; x <50 ; x++){
boolean flag = true;
       要想在X的值为true的时候打印 就得放这里
for (int y =2; y <x ; y++)
                        {
                                if (x%y==0 )
                                        {
出了循环 flag就变成false  打印不了X的值  ,
                                                flag = false;
                                                        //System.out.print(x+" ");
                                                break ;
                                        }
                        }
                        if (flag)
                        {
                                System.out.print(x+"是素数");
                        }


  if (x%y==0 )  的时候falg就等 false;
这时候就会跳到外层循环, 当外层循环要打印X 的时候
你这里
if (flag)
                        {
                                System.out.print(x+"是素数");
                        }
你这里又flag =true;  才打印.

当flag为true的时候, 他在内层不断循环.  而当 if (x%y==0 )  才会break跳出当前循环  当调出来继续的时候 flag的值已经被你改成fals  就打印不了
然后又进内层去循环. 当进不去这个 if (x%y==0 )的时候 也就是说他不能退出当前循环  他退出当前循环的时候flag的值是false了

明白吗????

作者: 黑马贾林栋    时间: 2012-11-3 22:07
boolean flag = true;放到第一个for循环里。
你这程序里,x=10时,x%y==0成立,于是flag变成了false,跳出内循环,x=11时,flag依然为false,所以不会打印,并且,以后flag都成false了,因此不会有输出结果
作者: 杨胜利    时间: 2012-11-3 22:37
代码修改如下:
class  ShuSuTest1
{
        public static void main(String[] args)
        {
               
                     
                for ( int x = 10; x <50 ; x++)  //外层for循环只是控制x的范围是10~50之间
                {
                        boolean flag = true; // boolean变量应该定义给内层for循环以之使用
                        for (int y =2; y <x ; y++)
                        {
                                if (x%y==0 )
                                        {
                                                flag = false;
                                                        //System.out.print(x+" ");
                                               // break ;
                                        }
                        }
                        if (flag)
                        {
                                System.out.print(x+"是素数");
                        }
                }
        }
}
打印结果:
D:\myjava>javac ShuSuTest1.java

D:\myjava>java ShuSuTest1
11是素数13是素数17是素数19是素数23是素数29是素数31是素数37是素数41是素数43是素数
47是素数


作者: 刘士林    时间: 2012-11-3 22:56
当10%2==0成立,就会执行到break语句,然后就直接跳出for循环了,当然不会打印了
作者: 朝花夕拾    时间: 2012-11-4 00:11
只有将flag变量赋值动作放在for循环里,才能继续执行,否则falg一直是false,不会执行到底下的if,当然不会有输出了,

未命名.jpg (25.54 KB, 下载次数: 36)

答案

答案

作者: 张钧杰    时间: 2012-11-4 21:53
谢谢,看懂了哟。




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