Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java打印1-100之间的完美数字_Java_For Loop_Nested Loops_Perfect Numbers - Fatal编程技术网

使用Java打印1-100之间的完美数字

使用Java打印1-100之间的完美数字,java,for-loop,nested-loops,perfect-numbers,Java,For Loop,Nested Loops,Perfect Numbers,我不知道我的代码有什么问题。它应该打印1-100之间的所有完美数字。我尝试了嵌套for循环、do while循环和for循环。但是,代码似乎不正确 class CompProject1 { public static void main() { int num, sum=0; int i; for(num=1; num<100; num++) { for(int j = 1;

我不知道我的代码有什么问题。它应该打印1-100之间的所有完美数字。我尝试了嵌套for循环、do 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);  

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

        }
    }
 }
}
class CompProject1
{
公共静态void main()
{
int num,sum=0;
int i;
对于(num=1;num,您需要:

  • sum=0
    每次循环迭代

  • 迭代到
    而不是
    这似乎是一个作业或家庭作业问题。你应该自己解决这个问题,而不是向堆栈溢出的人询问

    但是,您要查找的内容有一个答案。请注意!如果输入的数字是完美数字或不是完美数字,则此代码将打印,但不会打印100以下可能是完美数字的所有数字。这是您的家庭作业。

    将您的代码更改为:

    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
        }
    
    }
    
    publicstaticvoidmain(字符串[]s1)引发异常{
    int num,sum=0;
    int i;
    用于(num=1;num<100;num++){
    
    对于(int j=1;j所以,您的代码有一些小问题,我将尝试找出它们

    1.首先,sum变量应位于第一个for循环内
    2.第二个循环运行的限制将是
    j1)您肯定需要为每次迭代重置sum变量,因此您应该在每个循环中执行
    int sum=0;


    2) 您需要在
    j时进行迭代,确切的问题陈述是什么?因为您可能可以避开
    System.out.println(“6,28”)
    @jsheeran,拜托,伙计,这是一个编程任务这是正确的答案,应该标记为这样为什么你在循环外初始化sum,因为int有缓存?看起来很难看…他实际上应该迭代到num/2,你的答案可以解决他面临的问题,但在优化的情况下不太好优化做了什么你需要打印1-100之间的完美数字?这不会有任何区别。你的否决票太荒谬了。你怎么知道这是我的?问题不在于优化,而在于正确的数学模型。如果他需要评估前1000.000个数字的值呢?1.很明显你否决了它(因为在同一时间有评论)2.我为什么要关心它是否达到1000000?问题清楚地说明了1-100。这也不是一个关于性能的问题。
    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);  
    
            }
        }
     }
    }
    
    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();
      }
    }
    
    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