提问人:Varun Tripathti 提问时间:11/9/2023 最后编辑:TimmyVarun Tripathti 更新时间:11/9/2023 访问量:114
为什么我的代码显示输入的数字是质数,即使它不是?
Why is my code showing that the entered number is prime even when it's not?
问:
我使用了一种检查输入的数字是否为质数的方法。但是,它显示输入的数字每次都是质数。我的逻辑有什么错误?
import java.util.Scanner;
public class ptest2 {
static long isprime(long n){
if ( n == 0 || n == 1 ){
System.out.println(" Number is not prime ");
}
else{
for(int i = 2; i < n; i++){
if( n % i == 0 ) {
System.out.println("Number is not prime ");
}
else {
System.out.println("Number is prime ");
break;
}
}
}
return 0;
}
public static void main(String[] args) {
System.out.println("Enter a number to check if it is prime ");
Scanner sc = new Scanner(System.in);
long a = sc.nextLong();
System.out.println(isprime(a));
}
}
答:
1赞
Chris
11/9/2023
#1
你把它弄倒了。当你找到一个偶数除数时,你的循环就会短路。就目前而言,当您找到非偶数除数时,您会短路。
您只有一个始终保持不变的回报。
有人会认为你也希望你的方法返回。boolean
您正在寻找以下逻辑:
public class ptest2 {
static boolean isprime(long n) {
if (n == 0 || n == 1) return false;
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
虽然你也只需要迭代到 的平方根。n
评论
0赞
user85421
11/9/2023
并且,在测试 2 之后,不必测试其他偶数。(顺便说一句,不被认为是主要的)0
1
0赞
queeg
11/9/2023
#2
函数 isprime() 将始终返回 0。这有意义吗?好吧,您仍然有控制台输出。
但是看看你的循环:
for(int i = 2 ; i<n ; i++){
if(n%i == 0 ) {
System.out.println("Number is not prime ");
} else {
System.out.println("Number is prime ");
break;
}
}
}
仅仅因为一旦一个部门失败了,这个数字就不是素数。所有这些部门都必须失败。因此,第一次打破是错误的。
幸运的是,您不会在 n 之前运行循环,但只要 i 小于 n。否则,你会除以总是没有余数的 n/n,从而得出该数是素数的结论。
0赞
AztecCodes
11/9/2023
#3
这就是问题所在。isPrime() Method
解决方法:
- 损坏的方法已修复
isPrime()
- 调整了 OOP 规则
- 代码重构
好代码:
import java.util.Scanner;
public class ptest2 {
static boolean isPrime(long n) {
// Checks out exceptional cases
if (n == 0 || n == 1) {
System.out.println("Number is not prime");
return false;
}
// Optimized for-loop
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
System.out.println("Number is not prime");
return false;
}
}
System.out.println("Number is prime");
return true;
}
// Main Method calls
public static void main(String[] args) {
System.out.println("Enter a number to check if it is prime ");
Scanner sc = new Scanner(System.in);
long a = sc.nextLong();
isPrime(a);
}
}
评论
isFoo
boolean