我可以完美地运行此代码,但它没有按预期运行。我尝试制作一个isPrime方法,但是我一直收到一个错误,我得到多个响应而不是预期的单个响应。
例如,如果我输入数字3,我将得到回复:
[号码]不是素数。
[数字]是素数。
如果我输入数字100,我会收到回复:
[数字]不是素数。
[号码]不是素数。
[数字]不是素数。
...
[数字]是素数。
我得到了#34;不是素数。"响应99次,第100次响应将是"是素数。"每隔一段时间,响应"就会成为主要的"会出现。
有人能让我知道是什么搞乱了吗?
import java.util.Scanner;
public class Chapter_8_13 {
public static void main(String[] args){
Scanner keyboard = new Scanner(System.in);
System.out.println("This program helps determine if a number is prime!");
System.out.println("Enter a number: ");
int num = keyboard.nextInt();
for (int i = 2; i <= num; i++)
{
if (num % i == 0)
{
System.out.println(num + " is prime.");
}
else
{
System.out.println(num + " isn't prime.");
}
}
}
}
答案 0 :(得分:0)
实际上,你的算法是错误的。条件if (num % i == 0)
仅表示num
除以i
(并且num
不是素数)。
应该是:
boolean isPrime = true;
for (int i = 2; i <= Math.sqrt(num); i++)
{
if (num % i == 0)
{
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println("is prime");
} else {
System.out.println("isn't prime");
}
答案 1 :(得分:0)
当num
可被任何i
整除时,您设置了一个标记。然后检查外部循环标志的值以查找其是否为素数
flag=0;
for (int i = 2; i < num; i++)
{
if (num % i == 0)
{
flag=1;
break;
}
}
if(flag==1)
System.out.println(num + " is prime.");
else
System.out.println(num + " isn't prime.");
注意:您无需循环num
次。 sqrt(num)
就足够了。
答案 2 :(得分:0)
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out
.println("This program helps determine if a number is prime!");
System.out.println("Enter a number: ");
int num = keyboard.nextInt();
boolean isPrime = true;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
isPrime = false;
System.out.println(num + " isn't prime.");
break;
}
}
if (isPrime)
System.out.println(num + " is prime.");
}
}