我有一个数组,我想知道这个数组中的素数是多少。 我知道4号不是“素数”但它仍然打印我4号 我错过了什么? 我知道我不能添加第二个if:“if(isPrime&& number!= 4)但我只是想了解我的代码有什么问题以及为什么打印4号 感谢
int numbe []= {1,2,3,4,5,6,7,8,9,10};
System.out.println("Prime Numbers are:");
for(int number : numbe)
{
boolean isPrime =true;
for (int i = 2; i < number / 2 ; i++)
{
if ((number % i) == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
System.out.println("Prime Number: " + number);
}
答案 0 :(得分:5)
您在 for-loop for (int i = 2; i < number / 2 ; i++)
中犯了错误。
您的for-loop
应该是: -
for (int i = 2; i <= number / 2 ; i++){
// Your for-loop content.
}
在您的计划中,当n=4
时i < number / 2 ;
语句失败,因为i
已初始化为2
(i = 2)和{{ 1}} 即,(2 <2)。所以i < number / 2 ;
没有被执行。因此,通过修改为for-loop
,i <= number / 2 ;
执行一次,for loop
执行并if ((number % i) == 0)
正常工作。
答案 1 :(得分:5)
您必须按照以下内容更改内部for循环
for (int i = 2; i <= number / 2 ; i++) {
...
}
否则对于4
,您永远不会进入循环(4/2
为2
且2 < 2
为false
进行第一次迭代)和变量{{ 1}}仍为isPrime
。
答案 2 :(得分:3)
for循环中的逻辑不正确。正确的计划是:
更正:因为如果i小于4/2 = 2,循环终止,所以它永远不会进入循环
int numbe []= {1,2,3,4,5,6,7,8,9,10};
System.out.println("Prime Numbers are:");
for(int number : numbe)
{
boolean isPrime =true;
for (int i = 2; i <= number / 2 ; i++)
{
if ((number % i) == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
System.out.println("Prime Number: " + number);
}
}
答案 3 :(得分:1)
for循环的主体永远不会用数字4执行。
执行循环的条件是i < number / 2
,我的定义是int i = 2
。
这意味着条件将解析为2 < 4 / 2
,即2 < 2
,而2并不严格低于自身。您的比较运算符应为“劣等或等于”,即<=
因此,它至少会尝试检查4是否可以除以2,它可以将4标记为非素数。
也许你可以用i = 1开始。呃,实际上不是。
答案 4 :(得分:1)
由于for (int i = 2; i < number / 2 ; i++)
条件。
这里数字= 4,它检查2&lt; 2,这是假的,因此它不进入for循环,打印4是素数。
您需要将您的病情改为: -
for (int i = 2; i <= number / 2 ; i++)
答案 5 :(得分:1)
由于你的for循环从2开始并且如果i小于4/2 = 2则终止,实际上,你永远不会进入for循环。
使用i&lt; = number / 2
更改退出条件