1

我不知道我的代码有什么问题。它应该打印 1-100 之间的所有完美数字。我尝试使用嵌套的 for 循环、执行 while 循环和 for 循环。但是,代码似乎不正确。

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);  

            }
        }
    }
}
4

6 回答 6

1

这似乎是一个作业或家庭作业问题。您应该自己解决这个问题,而不是向 Stack Overflow 上的人询问。

但是,您正在寻找的东西在这里有答案。谨防!此代码打印输入数字是否为完美数字,但不会打印所有低于 100 的可能是完美数字的数字。那是你的功课。

于 2019-02-05T16:30:13.853 回答
1

1)你肯定需要为每次迭代重置你的 sum 变量,所以你应该int sum = 0;在每个循环中都这样做。

2)你需要迭代 while 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-05T16:35:23.737 回答
1

将您的代码更改为:

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
    }

}

关键要点:

  1. sum内部迭代完成后重置为 0
  2. 在你的内心 for-loop,你需要检查是否直到num - 1而不是num因为每个数字本身都可以整除
于 2019-02-05T16:33:26.747 回答
0
public class factors{
public static void main(String args[]){
    int sum=0;

    for(int k=2;k<=30;k++){
    for(int i=1;i<k;i++)
    {
        if(k%i==0)
            sum=sum+i;


    }
       if(k==sum)
             System.out.println(sum);


        sum=0;          //sum=0 is very important.
    }

}

}

输出

6
28
于 2020-01-12T12:10:26.107 回答
0

所以,你的代码有一些小问题,我会试着找出它们。

1.首先,您的 sum 变量应该在第一个 for 循环
2 内。第二个循环将运行的限制j<num不是j<=num因为对于完美数字,数字本身不应计入总和。

您的代码将如下所示。

我不知道我的代码有什么问题。它应该打印 1-100 之间的所有完美数字。我尝试使用嵌套的 for 循环、执行 while 循环和 for 循环。但是,代码似乎不正确。

class CompProject1 {

public static void main()

{

     int num;

     for(num=1; num<100; num++)

     {

         int sum = 0;

         for(int j = 1; j<=num ; j++)

         {

              if(num%j==0)

              {

               sum = sum+j;

              }

       }

       if(sum==num)

       {

        System.out.println(sum);  

        }
    }
 }
}
于 2019-02-05T16:35:19.607 回答
0

你需要:

  • sum = 0每次循环迭代
  • 迭代直到< num和不<= 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

于 2019-02-05T16:28:39.527 回答