本帖最后由 marhoury 于 2013-07-23 14:44:28 编辑

解决方案 »

  1.   

    boolean flag = false; 往下一行
    你的flag在101之后就一直是true了,因为每一次新数的循环开始,没有一个重置flag的机制,而你的代码假设每一个循环开始flag都是false
      

  2.   

    public static void main(String[] args) {
    int m = 0;
            boolean flag = false;
            for(int i = 101; i <= 200; i++)
            {
                for(int j = 2; j <= Math.sqrt(i); j++)
                {
                    if(i % j == 0)
                    {
                        flag = true;
                        break;
                    }
                }
                if(!flag)
                {
                    System.out.print(i + " ");
                    m++;
                }
                flag = false;
            }
            System.out.println("总共" + m + "个素数。");
    }
      

  3.   


    package Test;   
    public class T1 {       
      
    public static void main(String[] args) {         
    int m = 0;         
    boolean flag = false;        
    for(int i = 101; i <= 200; i++) {   
    flag = false; for(int j = 2; j <= Math.sqrt(i); j++) {                 
    if(i % j == 0) {                     
    flag = true;                     
    break;                 
    }             
    }             
    if(!flag) {                 
    System.out.print(i + " ");                 
    m++;             
    }         
    }         
    System.out.println("总共" + m + "个素数。");     


      

  4.   


    package Test;   
    public class T1 {       
      
    public static void main(String[] args) {         
    int m = 0;         
    boolean flag = false;        
    for(int i = 101; i <= 200; i++) {   
    flag = false;//应该在这里给flag赋值,因为可能每次都会修改其值,所以应该在每次开始外循环时重置其值
    for(int j = 2; j <= Math.sqrt(i); j++) {                 
    if(i % j == 0) {                     
    flag = true;                     
    break;                 
    }             
    }             
    if(!flag) {                 
    System.out.print(i + " ");                 
    m++;             
    }         
    }         
    System.out.println("总共" + m + "个素数。");     

    } 上面那个发错了。看注释部分。
      

  5.   

    楼上的正解应该没有错了. flag这里很容易忽略. 
      

  6.   

    正解,每个循环判断是否为素数的条件都没有初始化,还有就是判断是否为素数的那个循环
    for(int j = 2; j <= Math.sqrt(i); j++)
      {
          if(i % j == 0)   
           {        
               flag = true;         
               break;                
           }             

    判断循环结束的条件应该是j<=Math/2
      

  7.   

    正解,每个循环判断是否为素数的条件都没有初始化,还有就是判断是否为素数的那个循环
    for(int j = 2; j <= Math.sqrt(i); j++)
      {
          if(i % j == 0)   
           {        
               flag = true;         
               break;                
           }             

    判断循环结束的条件应该是j<=Math/2
    对不起我说错了,回去试验了一遍,j <= Math.sqrt(i)也对而且时间效率更好,不好意思