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+"是素数");
}
}
}
}
输出结果什么也没有,为什么啊。。我指定一个数。可以判断素数,循环一组条件就行了是,是什么情况,苦恼好久了!
由于你就在开始的时候初始化了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,当然不会有输出了,