不存在while循环(java代码)

时间:2013-09-25 08:16:05

标签: java while-loop

public class Q3
{
public static void main(String args[]){
int i, j;
int Max = 1000;
    //It's obvious that the first fifty prime numbers are less than 1000.
int counter = 1;
while (counter <= 50){
    for (i = 2; i < Max; i++){
        for (j = 2; j < i; j++){
            if ( i % j == 0){
            break;
            }
        }
        if (j >= i){
            System.out.printf("%s ", i);
            counter++;
        }
        if(counter % 10 == 0){
        System.out.print("\n");
        }       
    }
}

}
}

这是我写的一个程序,列出前50个素数,每行10个。但是,由于while循环,它无法正常工作。执行后,该程序列出了小于1000的所有素数。似乎while循环根本不起作用。谁能告诉我原因?非常感谢。

3 个答案:

答案 0 :(得分:1)

素数由第一个for循环生成。 while主体只执行一次。

您可以移除while,而是在for上使用不同的条件:

for (i = 2; counter <= 50; i++){

答案 1 :(得分:0)

你有一个大问题,真正的代码如下:

int i, j;
int Max = 1000;
//It's obvious that the first fifty prime numbers are less than 1000.
int counter = 0;
for (i = 2; i < Max && counter < 50; i++){
    for (j = 2; j < i; j++){
        if ( i % j == 0){
        break;
        }
    }
    if (j >= i){
        printf("%d ", i);
        counter++;
         if(counter % 10 == 0){
             printf("\n");
         }  
    }    
}

输出是: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229

答案 2 :(得分:0)

为什么不编写boolean isPrime(int number)函数? 您必须检查它是否为真,如果是,则增加计数器并打印数字。 这是一个天真的实现,我已经看到了一些其他更好的实现:

boolean isPrime(int number) {
  if (number < 2 || number % 2 == 0) {
    return true;
  }
  double sqrt = Math.sqrt(number);
  for (int i = 3; i <= sqrt; i += 2) {
    if (number % i == 0) {
      return true;
    }
  }
  return false;
}

在你的内容中:

for (i = 2; i < max; i++) {
  if (isPrime(i)) {
    counter++;
    // print number, print new line if needed
  }
}