A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张钧杰 中级黑马   /  2012-11-3 21:28  /  1871 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张钧杰 于 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+"是素数");
                        }
                }
        }
}
输出结果什么也没有,为什么啊。。我指定一个数。可以判断素数,循环一组条件就行了是,是什么情况,苦恼好久了!

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 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。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
这是判断数字是否是偶数,你把flag变为false没有变回来,所以是素数是flag为false没有往下执行。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
for (int x = 10; x <50 ; x++)

       boolean flag = true;  //这个放进来
回复 使用道具 举报
本帖最后由 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了

明白吗????

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
boolean flag = true;放到第一个for循环里。
你这程序里,x=10时,x%y==0成立,于是flag变成了false,跳出内循环,x=11时,flag依然为false,所以不会打印,并且,以后flag都成false了,因此不会有输出结果

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
代码修改如下:
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是素数

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
当10%2==0成立,就会执行到break语句,然后就直接跳出for循环了,当然不会打印了

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
只有将flag变量赋值动作放在for循环里,才能继续执行,否则falg一直是false,不会执行到底下的if,当然不会有输出了,

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

答案

答案
回复 使用道具 举报
谢谢,看懂了哟。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马