您的位置:首页 > 编程语言 > Java开发

对于java中变量发生改变,引起的输出结果改变

2015-04-10 21:30 218 查看
最近刚学java时,有一个题目:
打印100到200之间所有的素数
第一判断100
第二次判断101....一直到200
旁边有个同学,写了程序后,发现没有输出结果,她就问我为什么?我当时一看,感觉好像没什么
问题啊,但是运行了,就是什么都没输出,我就郁闷了,当时她的代码是这样的:

public class Text_SuShu
{

/**
* @param args
*/
public static void main(String[] args)
{
boolean suShu = true;

for (int i = 100; i <= 200; i++)
{
for (int j = 2; j< i; j++)
{
if(i % j ==0)
{

suShu = false;

break;
}
}
if(suShu)
{

System.out.println(i);
}
}
}
}
我当时是经过调试了,发现了问题,她把 boolean suShu = true; 这个布尔型变量定义在for循环语
句外面,这样suShu的初始值为true,当进入for循环之后,第一次i = 100,因为100符合 if(i % j ==0)的条
件,这样suShu = false的值就变了,break后跳出了循环;在进行下次的循环时,因为suShu的值还是
false,都不符合下面两个if的条件,所以一直到循环结束,suShu的值都还是false,自然也就没有输出值了。
于是,经过修改后代码是这样的:
public class Text_SuShu
{

/**
* @param args
*/
public static void main(String[] args)
{

for (int i = 100; i <= 200; i++)
{
boolean suShu = true;//位置的改变

for (int j = 2; j< i; j++)
{
if(i % j ==0)
{

suShu = false;

break;
}
}
if(suShu)
{

System.out.println(i);
}
}
}
}
这时如果有人说:博主凑字数的吧,这两个代码基本就差不多。我想说的这两个代码确实差不多,
但我不是凑字数,这两个代码只有一个地方不一样,那就是boolean suShu = true;声明的位置不一样,
上面一个代码是在for语句外面,而下面这个代码是在for语句里面,这样只是因为一个在里面一个在外
面,但是执行后的结构完全不一样,下面这个代码能正确输出100~ 200之间所有素数,这是为什么呢?
因为下面这个代码,进入内层for语句后,当有符合if(i % j ==0)这个条件的,suShu值变成flase,
但是内层循环结束的时候,又回到外层循环时,suShu的值又会被置成true,这样就保证了代码能正确执行。
这是我学习java时遇到的一个问题,希望对java初学者有所帮助。
本文出自 “java中常见问题” 博客,请务必保留此出处http://liwei9455.blog.51cto.com/10104268/1631064
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: