我实际上要放松一下......我写的代码显示了各种各样的"总和"和"计数"在我要用System.out.print(...)
显示的实际最后结果之间。有谁可以帮助我吗?为了展示一切,我做错了什么?
public class Prim {
public static void main(String[] args) {
int end = 11;
int count = 1;
long sum = 0;
for (int number = 10; count<=end; number++) {
if (isPrim(number)) {
sum = sum + number;
count++;
System.out.println(sum);
}
}
}
public static boolean isPrim(int number){
for (int i=2; i<number; i++) {
if (number % i == 0) {
}
}
return true;
}
}
答案 0 :(得分:1)
一些事情。
首先,您的isPrim
可以进行优化,以便i
仅递增到sqrt(number)
。
其次,如果return false
为(number%i == 0)
,您需要true
。现在,它总是返回true
,这就是你的代码输出所有总和的原因。
第三,您需要将istPrimeZahl
更改为isPrim
(反之亦然),因为您尚未在任何地方定义istPrimeZahl
。
第四,您可以将sum = sum + number
更改为sum += number
。
最后,您可能希望将System.out.print
行移到下面两行,这样它只会在循环结束后打印sum
,而不是每次迭代循环。
(另外,您可能希望更改for
循环,使其从 100 开始,而不是10 :) :)
如果您想要最终版本,我已将其粘贴在此处:
public class Prim {
public static void main(String[] args) {
int end = 200;
int count = 0;
long sum = 0;
for (int number = 100; number<=end; number++) {
if (isPrim(number)) {
sum += number;
count++;
System.out.println(sum);
}
}
}
public static boolean isPrim(int number){
for (int i=2; i*i<=number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
答案 1 :(得分:0)
isPrim函数在if语句后缺少'return false'。这意味着isPrim将始终返回true,因此每个数字都将写入控制台。
System.out.print也在for循环中,因此每次都会打印更新的总和。目前还不清楚这是否是故意的,但如果你只想获得一个结果,那么也应该将它移动两行。
答案 2 :(得分:0)
对于介于100到200之间的素数之和,请尝试以下代码:
public class Primzahlen {
public static void main(String[] args) {
int sum = 0;
for (int i = 100; i < 200; i++)
if (isPrim(i))
sum += i;
System.out.print(sum);
}
public static boolean isPrim(int num) {
for (int i = 2; i <= Math.sqrt(num); i++)
if (num % i == 0)
return false;
return true;
}
}