1

我有一个为课堂写作业并且被卡住了,无法弄清楚如何让它像它应该的那样正确设置。我很感激我得到的任何帮助谢谢。这是作业:

如果整数的因数(包括 1(但不包括数字本身))与该数相加,则称该整数为完美数。例如,6 是一个完美数,因为 6=1+2+3。编写方法 Perfect 确定 number 是否为完美数。在确定并显示 2 到 1000 之间的所有完美数字的应用程序中使用此方法。显示每个完美数字的因数以确认该数字确实是完美的。

输出:

6 is perfect.
Factors:1 2 3
28 is perfect.
Factors: 1 2 4 7 14
496 is perfect.
Factors: 1 2 4 8 16 31 62 124 248

这是我遇到的代码:

public class Homework4 {

    public static void main(String[] args) {

        for(int num=2;num<=1000;num++)
        {
            if(perfect(num))
            {
                System.out.println(num + " is perfect.");
                System.out.printf("Factors: ",perfect(num));

            }

        }
    }
        public static Boolean perfect(int num)
        {
            int sum = 0;

            for(int i=1;i<num;i++)
            {
                if (num % i == 0)
                {
                    sum+=i;
                }
            }
            if(num==sum)
            {
            for(int i=1;i<num;i++)
            {
                if (num % i == 0)
                {
                    System.out.print(i+" ");
                }
            }


            }
            return sum==num;
        }

}

跑:

1 2 3 6 is perfect.
1 2 3 Factors: 1 2 4 7 14 28 is perfect.
1 2 4 7 14 Factors: 1 2 4 8 16 31 62 124 248 496 is perfect.
1 2 4 8 16 31 62 124 248 Factors: BUILD SUCCESSFUL (total time: 0 seconds)
4

4 回答 4

1

有两种方法可以解决此问题。

  • 您可以将您的perfect方法分成两种单独的方法 - 一种检查数字是否完美,另一种打印其因子。在检查时调用第一个 - 如果它返回 true,则调用第二个。

或者

  • 您可以将打印的行移动... is perfect到方法本身中。然后从 中删除整个ifmain
于 2014-12-02T23:48:40.590 回答
0

像这样的东西怎么样:

public class Homework4 {

public static void main(String[] args) {

    for(int num=2;num<=1000;num++)
    {
        if(perfect(num))
        {
            System.out.println(num + " is perfect.");
            System.out.printf("Factors: ");


            for(int i=1;i<num;i++)
            {
                if (num % i == 0)
                {
                     System.out.print(i+" ");
                }
            }
        }
    }
}
public static Boolean perfect(int num)
{
    int sum = 0;

    for(int i=1;i<num;i++)
    {
        if (num % i == 0)
        {
            sum+=i;
        }
    }
    return sum==num;
}
}
于 2014-12-02T23:55:30.110 回答
-2

尝试这个

public class Homework4 {

public static void main(String[] args) {

    for(int num=2;num<=1000;num++)
    {
        if(perfect(num))
        {
            System.out.println(num + " is perfect.");
            System.out.printf("Factors: ");


            for(int i=1;i<num;i++)
            {
                if (num % i == 0)
                {
                     System.out.print(i+" ");
                }
            }
            System.out.print("\n"); // add this line to your code

        }
    }
}
public static Boolean perfect(int num)
{
    int sum = 0;

    for(int i=1;i<num;i++)
    {
        if (num % i == 0)
        {
            sum+=i;
        }
    }
    return sum==num;
}
}
于 2017-10-28T20:03:14.393 回答
-3
public class Homework4 {

    public static void main(String[] args) {
        prime();
    }//end main

     public static void prime(){
                int sum=0;
                for(int i=1;i<=1000;i++){
                    
                    for(int k=2;k<i;k++){
                        
                        if(i%k==0){
                          sum+=i/k;
                        }//end if
                        
                        if(sum+1==i && k==i-1){
                              System.out.println(i);
                              
                        }//end if
                                  
                        
                        
                    }//end inner for

                    sum=0;

                }//end outer for
                
            }//end prime
    
    
}//end class

输出

6

28

496

于 2020-06-09T10:44:48.047 回答