题目是输出M,N间的质数(M<N)。我输入2,5     输出却是2,3,5,5,5
我知道问题出在这个循环里 请大家帮忙看看怎么修改,谢谢了!for(i=m;i<=n;i++) {
    int b;
       for(b=2;b<=i;b++) {
        if(i == 2){
         System.out.print(i + " ");
        }
        else if(i % b ==0)
         break;
        else 
         System.out.print(i + " ");
       } 
问题补充:我知道是i=5时,b=2,3,4时导致输出3个5。
但不知道该怎么修改简单。

解决方案 »

  1.   

    把break改成continue就行了
      

  2.   

    public class Main {
    public static void main(String[] args) {
    int i=0,m=2,n=5;
    for (i = m; i <= n; i++) {
    if(prime(i)) {
    System.out.print(i + "  ");
    }
    }
    }

           //用该函数判断是否为素数
    public static boolean prime(int n) {
    boolean flag = true;
    if(n == 2) {
    return flag;
    }
    for(int i=2; i<=n/2 + 1; i++) {
    if(n % i == 0) {
    flag = false;
    break;
    }
    }
    return flag;
    }}
      

  3.   

    for(i=m;i<=n;i++) {
      for(int b=2;b<i;b++) {
        if(i == 2){
          System.out.print(i + " ");
          break;
        }
         if(i % b ==0)break;
         if(b==i-1)System.out.print(i + " ");
      } 
      

  4.   

    6楼的if(b==i-1)System.out.print(i + " ");
    能解释下这句吗?有点迷糊  谢谢!
    [/Quote]
      

  5.   

    以上代码简单明了,而且是根据楼主的思路改正而来的第一个if判断是不是2
    第二个if判断从b到i-1有没有能被i整除的数,有则i不是素数,退出内层循环
    第三个if是在b到i-2都没有能被i整除的数,而且b==i-1,证明不b不是小于i-1的数的情况下,i一定为素数分析完毕
      

  6.   

    举个例子,如果要判断7是不是素数,在内层循环里面,如果从2到6都不能被7整除,即内层循环执行到b=6,第二个if不成立就会判断第三个if,如果除到最后一个数6了,都没找到能被7整除的数,那么7肯定就是素数了
      

  7.   

    假如说在6之前已经找到了一个数能被7整除,那么第二个if成立了,跳出了内层循环,第三个if就不会执行,第三个if只是为b==i-1这一特殊情况而准备的
      

  8.   

    在最后一个else语句里加入一条件break