public class ex
{
public static void main(String[] args)
{
int i,j,k;
for(i=3;i<101;i++)
{
for(j=2;j<i;j++)
{
k=i%j;  /* k是余数 */
    if (j==(i-1)) System.out.println(i);  /*如果除到自本身-1的数为止还不被整除就输出*/
else if (k==0) break;  /*如果被整除了就跳出 */
}
}
}
}
刚刚学习完第一单元开始做习题,做了个求100内的素数的题目,本来思路是因为1为固定素数没考虑进去,后来不知道怎么连2这个都忘记了,从3开始计算的。结果做完之后发觉忘记了2,于是将i和j改为初值为2和1,然后编译OK,但是输出后要么是个单独的2要么是直接没有任何字符输出,而之前i,j为3,2的时候输出是3~100之间的素数。

解决方案 »

  1.   

    我帮你找的正确的代码.你自己做个参考.
    public class ss { 
        public static void main(String args[]) { 
       int i,j; 
         for(j=2;j<=100;j++) { 
         for(i=2;i<=j/2;i++) { 
        if(j%i==0) 
        break;
       } 
         if(i>j/2) { 
          System.out.println(j); 
          } 
        } 
      } 
    }
      

  2.   

    去算算i和j,你这当然只能循环一次了……1是比较特殊的,不管是i还是j
    第一次:i=2,j=1 ==> k=0 ==> println; ==> 2被打印
    第二次:i=2,j=2 ==> 不满足内循环条件
    第三次:i=3,j=1 ==> k=0 ==> break;
    ……以后就都是break了===================================else   if   (k==0)   break;     /*如果被整除了就跳出   */==〉if   (k==0 && j!=1)   break;     /*如果被整除了就跳出   */===================================if (i>j) {
    XXX
    } else if (i<j) {
    YYY
    } else if (i==j) {
    ZZZ
    }
    良好的习惯:else if (){}括号中,用来判断条件的变量,最好尽量与if()中的相同。
      

  3.   

    原因就是你把j的初值改成1了。
    第一次循环时,i=2,j=1,k=0,先判断条件if(j==(i-1)),返回true,所以输出了2,
    i从3之后,每次j=1时,k都等于0,直接就break了,一直到结束。你这段程序的逻辑、执行效率、代码风格等都需要改进加强,但初学java一般都要经历这样一个过程。
      

  4.   

    class Ex{
    public static void main(String[] args){
    int j,k;
    for(int i=1;i<101;i++){
    k=1;
    j=0;
    while(k<=i){
    if(i%k==0){
    j++;
    }
    k++;
    }
    if(j<=2&&j>1){
    System.out.print(i+",");
    }
    }
    System.out.println();
    }
    }