当前位置: 代码迷 >> Java相关 >> 求解两个质数小程序详细差异
  详细解决方案

求解两个质数小程序详细差异

热度:337   发布时间:2016-04-22 21:56:52.0
求解两个质数小程序详细区别
比较下面两个程序有何区别:
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语句内容不加{}  你这样写会出很大问题的    对于原因你理解没?
  相关解决方案