我正在尝试创建一个void方法,将素数打印到给定的int参数.这就是我所拥有的,它不起作用.
public class listPrimes {
public static void main(String[] args) {
printPrimes(1000);
}
static void printPrimes(int max) {
int counter = 0;
for (int i = 2; i <= max; i++) {
for (int n = 2; n < i; n++) {
if (i % n == 0) {
counter++;
}
}
if (counter == 0) {
System.out.println(i);
counter = 0;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我能够使用下面的两种方法创建所需的效果,但我想用一个方法来做.我的代码上面有什么问题?
public class listPrimes {
public static void main(String[] args) {
printPrimes(1000);
}
private static void printPrimes(int max) {
for (int i = 2; i <= max; i++) {
if (primeCheck(i)) {
System.out.println(i);
}
}
}
static boolean isPrime(int check) {
for (int i = 2; i < check/2; i++) {
if (check % i == 0) {
return false;
}
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
你永远不会重置价值counter的outer loop.所以,一旦它增加,它永远不会是0.所以,只需counter在外循环的开头重置: -
for (int i = 2; i <= max; i++) {
counter = 0;
for (int n = 2; n < i; n++) {
if (i % n == 0) {
counter++;
}
}
if (counter == 0) {
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我更愿意采用第二种方式,因为它以不同的方法划分了任务.因此,这两种方法都有自己定义的角色.你可以轻松地在其他地方使用它们.请记住,您在不同方法之间划分的任务越多,您获得的可重用性就越高.让一个方法只做一个任务总是更好.
另外,我建议重命名的方法- primeCheck给isPrime,因为它返回一个boolean值.所以,只是遵循命名惯例,isPrime将是一个好名字.
| 归档时间: |
|
| 查看次数: |
22115 次 |
| 最近记录: |