Java 素数程序不起作用
我试图用Java编写一个简单的程序,输出所有的素数,从数字2跳到数字n。它不起作用,我也没有主意了。如果有人能看看我的代码,告诉我问题出在哪里,我将不胜感激Java 素数程序不起作用,java,primes,Java,Primes,我试图用Java编写一个简单的程序,输出所有的素数,从数字2跳到数字n。它不起作用,我也没有主意了。如果有人能看看我的代码,告诉我问题出在哪里,我将不胜感激 public class PrimeNum { public static void main(String[] args) { int n = 50; int notAPrime = 0; System.out.println("All prime numbers before
public class PrimeNum {
public static void main(String[] args) {
int n = 50;
int notAPrime = 0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i = n; i > 2; i--){
for(int j = 2; j < i; j++){
if(i % j == 0){
notAPrime++;
}
}
if(notAPrime == 0){
System.out.println(i);
notAPrime = 0;
}
}
}
}
您的for循环缺少一个中断
public class primeNum {
public static void main(String[] args) {
int n=50;
int notAPrime=0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i=n; i>2; i--){
for(int j=2; j<i; j++){
if(i%j==0){
notAPrime++;
break; //your program is missing this statement
}
}
if(notAPrime==0){
System.out.print(i + " ");
}
notAPrime=0; //In your program it is inside the if statement which makes it incorrect.
}
}
}
输出:
数字50之前的所有素数都是:
47 43 41 37 31 29 23 19 13 11 7 5 3
通过进行以下更改,可以提高程序的效率:
public class primeNum {
public static void main(String[] args) {
int n=50;
int notAPrime=0;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i=n; i>2; i--){
if(i%2==0){
continue;
}
for(int j=3; j<i; j+=2){
if(i%j==0){
notAPrime++;
break;
}
}
if(notAPrime==0){
System.out.print(i + " ");
}
notAPrime=0;
}
}
}
只需在forint i=n中声明notAPrime;i>2;i-使每个i-候选人成为主要候选人的地方性。
现在,您可以增加notAPrime,并且永远不会将其重置为零。试试这个
public class primeNum {
public static void main(String[] args) {
int n = 50;
boolean prime;
System.out.println("All prime numbers before number " +n+ " are : ");
for(int i = n; i > 2; i--){
prime = true;
for(int j = 2; j < i; j++){
if(i % j == 0){
prime = false;
}
}
if(prime){
System.out.println(i);
}
}
}
}
注意,我将notAPrime变量从int改为boolean,并改为一个名称,告诉您它的含义。如果只增加notAPrime整数,则永远不会得到任何期望的结果。
顺便说一句,这是一个热修复程序,您得到了更正后的第一种代码形式。请记住,2也是一个素数,您的代码忽略了这一点。
只需要再努力一点 实际输出是什么?印刷错误:只需移动notAPrime=0;在if之后,不在it中。否则,您将继续递增,而不对每个数字将其设置为0。在这种特定情况下没有输出。如果我把notAPrime=0放在If循环之外,它也不会工作。它输出3,4,5,5,5,6,6,7,7,7,8,8,8,8,9…这是一个熟悉调试器使用的好机会。有了它,您可以在代码执行时逐行遍历代码,并观察运行时值和行为。这将帮助您确定问题发生的位置。我使用记事本,而不是JDK。为什么我会被否决?这个程序给出了正确的结果。