比较下面两个程序有何区别:
1,
public class zhishu{
public static void main(String args[])
{ loop:
for(int i=101;i<=200;i++)
{for(int j=2;j<=(i/2);j++)
if(0==i%j)
continue loop;
System.out.printf("%d\n",i);}
}
}
2,
public class zhishu{
public static void main(String args[])
{
for(int i=101;i<=200;i++)
{for(int j=2;j<=(i/2);j++)
if(0==i%j)
;
System.out.printf("%d\n",i);}
}
}
为何后者不行,break不是跳出第二个for循环吗?
java
------解决方案--------------------
loop 从我开始学习java开始貌似就没见过loop了 今天看到了顺便去网上学习了下 原来是替代goto的啊
不过你第二个代码哪里有break? 我咋没发现呢? 你是想在if后面添加break是吧,break只是跳出一层循环 也就是说直接进行第一层的循环继续执行
------解决方案--------------------
public class zhishu{
public static void main(String args[])
{
for(int i=101;i<=200;i++){
boolean isOK = false;
for(int j=2;j<=(i/2);j++){
if(0==i%j){
isOK = true;
break;
}
}
if (isOK) {
continue;
}
System.out.printf("%d\n",i);
}
}
}
------解决方案--------------------
这两个代码完全不是一个意思
首先第一个:当i整除j的时候就不输出,继续执行j++
第二个:当i整除j的时候直接跳过这个j,执行i++了
这两个显然不一样呀
建议去看看break和continue的区别,我见到简单说下:continue是跳过之后的循环体,继续执行循环,也就是continue之后的语句不执行了,二继续执行循环语句如上面的j++;而break是跳过整个循环,集训执行循环之后的操作,但是只跳出一层循环,如上面的就跳出了内层循环直接执行外层循环的循环语句,也就是i++。
楼主应该能看出差别了吧
------解决方案--------------------
额 看错了 不好意思 没看到第一个代码continue后面有loop
刚把你的代码复制到MyEclipse里面测试了下 终于找到问题所在了
第一个代码是正确的 第二个是错误的 原因在于当第二个代码执行if (0 == i % j) 为true时break会跳出里面的循环继续执行外面的循环 继续执行外面的循环你会发现System.out.printf("%d\n", i);这条语句就会执行了 为什么呢 因为这条语句属于外层循环体的语句而非内层循环体 我已开始看错的原因就在这 你写代码能规范点吗 for循环体不加{} if语句内容不加{} 你这样写会出很大问题的 对于原因你理解没?