Java编程问题,boolean语句"boolean flag = true"的位置不同导致的程序结果不同,请高手指导说明!

程序一.boolean语句在for循环外//开关,如果能被除了1和它本身的数字整除,则改变booleanflag=true;//判断2~6以内的质数for(inti=2;... 程序一.boolean 语句在for循环外
//开关,如果能被除了1和它本身的数字整除,则改变
boolean flag = true;

//判断2~6以内的质数
for(int i=2;i<=6;i++) {
for (int j=2;j<=i/2;j++) {
System.out.print(i+"+"+flag+" ");//输出为4+true 5+false 6+false,为什么???
if(i%j == 0) {
flag = false;
break;
}
}
}
程序二.boolean 语句在for循环内
//判断2~6以内的质数
for(int i=2;i<=6;i++) {
//开关,如果能被除了1和它本身的数字整除,则改变
boolean flag = true;
for (int j=2;j<=i/2;j++) {
System.out.print(i+"+"+flag+" ");//输出为4+true 5+true 6+true,为什么这两个不一样??
if(i%j == 0) {
flag = false;
break;
}
}
}

我的问题是,相同的程序中,同样的语句位置不同为什么输出不相同,如果考虑作用域的话,程序一与程序二是相同的,请解答,谢谢!
展开
 我来答
百度网友485dc0f
推荐于2017-11-27 · TA获得超过860个赞
知道小有建树答主
回答量:381
采纳率:100%
帮助的人:335万
展开全部
单就作用域而言:
上面的代码和下面的代码是不一样的。
上面的代码:flag写在外面,所有的数字都是用这一个flag。当i=4的时候,因为你是先做的输出,所以4是true,然后紧接着后面的判断,因为此时i和j都是2,满足条件,flag就变成false。而你的代码里又没有将flag改回true的地方,所以后面不管i是几都会输出false。
下面的代码,因为你的flag是写在for里面,所以每次的flag其实都是一个新的变量。同样,因为你先做的输出,所以不管数字是几,都会输出true,就算后面改了,因为作用域的问题,这个被修改过的flag还没被使用就被遗弃了,所以你下面这段代码的if语句其实是废的。
山水阿锐
2015-03-30 · TA获得超过34.3万个赞
知道顶级答主
回答量:23.7万
采纳率:91%
帮助的人:3.4亿
展开全部
您好,if(m%i==0)break;的意思就是用变量m的值除以i取余数,如果没有余数(结果为0),
则break, break的意思是跳出for循环。
flag是一个boolean变量,用来标识m是不是素数。
也就是说如果i在for循环中能够递增到m相同的值(一直没有break),
则说明i是素数。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
典勇嘉谋
2015-03-30 · TA获得超过362个赞
知道小有建树答主
回答量:308
采纳率:100%
帮助的人:147万
展开全部
虽然都是局部变量,两者的作用域绝对不一样。所以不要武断的下结论。
第一个的作用域在循环外,2到6的循环结束之后仍然存在。
第二个只存在外循环里面,2到6的循环结束之后就没有了。而且每次循环,都是一个新的flag。

这个东西说实话还真不知道怎么解释,无从解释。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式