我不知道我的代码有什么问题。它应该打印出1-100之间的所有完美数字。我尝试了嵌套的for-loop、do while循环和for-loop。然而,代码似乎是不正确的。
class CompProject1
{
public static void main()
{
int num, sum=0;
int i;
for(num=1; num<100; num++)
{
for(int j = 1; j<=num ; j++)
{
if(num%j==0)
{
sum = sum+j;
}
}
if(sum==num)
{
System.out.println(sum);
}
}
}
}发布于 2019-02-06 00:33:27
将您的代码更改为:
public static void main(String[] s1) throws Exception {
int num, sum = 0;
int i;
for (num = 1; num < 100; num++) {
for (int j = 1; j <= num - 1; j++) { // change made here
if (num % j == 0) {
sum = sum + j;
}
}
if (sum == num) {
System.out.println(sum);
}
sum = 0; // change made here
}
}要点:
sum重置为0完成内部迭代后,在您的内部代码中,您需要检查是否为num - 1而不是num,因为每个数字都可以被自身整除<>G210for-loop >
发布于 2019-02-06 00:35:24
1)你肯定需要为每一次迭代重置你的sum变量,所以你应该在每次循环中执行int sum = 0;。
2)你需要在j <= num/2;的时候迭代!
3)考虑使用Java 8,我将在这里为您编写一些示例。
在这里看我的例子,这是非常漂亮的:
public class PerfectNumbersDemo {
public static void main(String[] args) {
IntStream.range(1, 100)
.filter(PerfectNumbersDemo::isPerfect)
.forEach(System.out::println);
}
private static boolean isPerfect(int number) {
return number == IntStream.rangeClosed(1, number / 2)
.filter(i -> number % i == 0)
.sum();
}
}发布于 2019-02-06 00:28:40
您需要:
使用每个循环的
sum = 0直到iteration<= num下面是固定的代码:
public static void main(String[] args) {
int sum;
for(int num = 1; num < 100; num++) {
sum = 0;
for(int j = 1; j< num; j++) {
if(num % j == 0) {
sum += j;
}
}
if(sum == num) {
System.out.println(sum);
}
}}
输出:
6
28
https://stackoverflow.com/questions/54538708
复制相似问题