问题描述
我的代码
void printPrimes (int max) {
boolean prime;
for (int n = 2; n < max; n++){
prime = true;
double maxF;
maxF = Math.sqrt(n);
for (int f = 2; f < maxF; f++) {
if (n % f == 0) {
prime = false;
}
}
if (prime == true) {
System.out.println(n + " is prime");
}
}
}
这是我得到的结果
4是素数
5是素数
6是素数
7是素数
8是素数
9是素数
10是素数
11是素数
我该如何解决此问题
解决方法
调试代码。如图所示,拿出笔,是计算机。您在不运行此代码的情况下回答了它应该做什么。然后检查它对调试器的实际作用(如果需要,或sysout语句)。在那找到差异的地方,您发现了一个错误。
例如Math.sqrt(4),那是什么? 2比2小吗?
,在循环中更改条件
for (int f = 2; f <= maxF; f++) { // should be <= maxf
if (n % f == 0) {
prime = false;
}
}
,
至少将f < maxF
替换为f*f <= max
因为循环最大值应小于或等于
Math.sqrt(数字)
public class Main {
public static void main(String[] args) {
printPrimes(20);
}
static void printPrimes (int max) {
for(int i=2;i<=max;i++){
if(isPrime(i)){
System.out.println(i+" is prime");
}
}
}
static boolean isPrime(int number) {
if(number < 2){
return false;
}
for(int i=2;i<=Math.sqrt(number);i++){
if(number % i == 0){
return false;
}
}
return true;
}
}