Java-查找-素数与否
使用Eclipse、Java 试着制作一种方法来检查一个数字是否是素数(平均值可以被1和他自己分开) 当前创建了一些功能(下面的代码)。此代码返回所需结果,但并非所有素数都返回,这意味着对于数字33和55,它返回的是Java-查找-素数与否,java,eclipse,Java,Eclipse,使用Eclipse、Java 试着制作一种方法来检查一个数字是否是素数(平均值可以被1和他自己分开) 当前创建了一些功能(下面的代码)。此代码返回所需结果,但并非所有素数都返回,这意味着对于数字33和55,它返回的是false,而不是true 代码 private static void numberCheker() throws IOException { System.out.println("Enter number - "); int number; number
false
,而不是true
代码
private static void numberCheker() throws IOException {
System.out.println("Enter number - ");
int number;
number = getNumber();
boolean result = true;
if ((number % 2 == 0) && (number != 2)) {
System.out.println("Not");
} else if (number == 1) {
System.out.println("1 not a valid number");
} else if (number == 2)
System.out.println("Simple");
else {
for (int i = 2; i < number + 1; i++) {
if (number % i == 0) {
result = false;
} else
result = true;
}
if (result = true)
System.out.println("Simple");
else
System.out.println("not Simple");
}
}
但是我有
Enter number -
33
not simple - **WRONG**
Enter number -
55
not simple - **WRONG**
编辑: 多谢各位 试着像Michael Konietzka sad那样做:
private static boolean numberCheker() throws IOException {
System.out.println("Enter number - ");
int number = getNumber();
for (int i=2;i<number;i++)
{
if (number%i==0) return false;
}
return (number>1);
}
现在它的工作完美了
谢谢你的帮助 我不知道简单数的定义是什么 但这可能是个问题
if (result=true)
改为
if (result)
编辑您还需要修复其他人提到的漏洞
if (result=true)
我想你指的是双等号:
if (result==true)
当您说if(result=true)时,此语句将始终返回true
编辑:您还需要修复for循环中的if-else内容。见梅先生的答案。3是素数,但3的倍数不是素数,5的倍数也是如此。素数的倍数不是素数。素数只有这么多。还没有制定出设计素数的明确规则,我怀疑你们是否会这样做。
素数no是一个不在集合2n n 3n中的数字,它只能被自身和1整除。问题是,当你发现这个数字不是素数时,你并没有跳出循环,要解决这个问题,只需添加、中断;在你的if陈述之后。。。代码如下:
if (number%i==0){
result=false;
break;
}
编辑
此外,您还需要修复if语句,因为@Smit建议出现2个问题
1-如果为false,则需要添加中断
2-最终需要更改if
if (result=true)
到
if(结果)
公共静态void main(字符串[]args){
System.out.println(“输入数字-”);
整数=55;
布尔结果=真;
如果((数字%2==0)和&(数字!=2)){
系统输出打印项次(“非”);
}
else if(数字==1){
System.out.println(“1不是有效数字”);
}
else if(数字=2)
System.out.println(“简单”);
否则{
对于(inti=2;i,您的bug在循环终止中
通过循环直到数字+1,数字最终将被自身除,剩下的余数为零,因此每个数字看起来都不是素数
循环到number/2(sqrt(number)会更有效,但代码的质量表明这并不重要)
此外,如果检测到零的余数,则必须中断循环。您可以在类的静态方法中进行检查:
public static boolean isPrime(final int n)
{
for (int i=2;i<n;i++)
{
if (n%i==0) return false;
}
return (n>1);
}
public静态布尔值isPrime(final int n)
{
对于(int i=2;i1);
}
您必须通过从2到n-1的所有数字进行迭代,并检查n是否可以被i整除而不带余数。如果可以,则该方法可以立即返回false,因为找到了一个因子。如果在2和n-1之间未找到因子,且该数字大于1,则该方法返回true
要使用此方法,您可以简单地使用此方法,例如:
public static void main (String[] args)
{
for (int i=1;i<10;i++)
{
System.out.println(i+": "+isPrime(i));
}
publicstaticvoidmain(字符串[]args)
{
对于(int i=1;i我建议查看一种称为Erathosthenes筛的算法:
创建素数列表是一个非常简单的算法,它将帮助您了解如何确定一个数字是否为素数
顺便说一句-不要忘记排除负数!“找不到错误”,问题在哪里?简单数的定义是什么?请帮助-花3个小时-找不到错误..code
->什么,把所有内容压缩成一个句子?简单数是什么意思?不是复数?99不是质数。3*33=99(不是简单数)或如果(结果==true)
这甚至不应该编译。@EAKAEif(result==true)
不过是if(result)
因为result
是布尔值。所以它可能是真的,也可能是假的。我知道它们是一样的,这是个人偏好的问题。不过,一些ide将它标记为警告(我想)@mikeTheLiar这将很好地编译。这是一个布尔赋值,所以最终结果将变为真。但如果不是布尔赋值,则不会编译。
if (result)
public static void main(String[] args) {
System.out.println("Enter number - ");
int number = 55;
boolean result = true;
if ((number%2==0) && (number!=2) ){
System.out.println("Not");
}
else if (number ==1){
System.out.println("1 not a valid number");
}
else if (number ==2)
System.out.println("Simple");
else{
for (int i=2; i<number;i++){
if (number%i==0){
result=false;
break;
}
else
result = true;
}
if (result)
System.out.println("Simple");
else
System.out.println("not Simple");
}
}
}
public static boolean isPrime(final int n)
{
for (int i=2;i<n;i++)
{
if (n%i==0) return false;
}
return (n>1);
}
public static void main (String[] args)
{
for (int i=1;i<10;i++)
{
System.out.println(i+": "+isPrime(i));
}