【问题标题】:Perfect number in java using methods for homeworkjava中的完美数使用作业方法
【发布时间】:2020-06-09 19:49:22
【问题描述】:

我要为课堂写作业,但被卡住了,不知道如何让它像预期的那样正确设置。我很感激我得到的任何帮助谢谢。这是作业:

一个整数被称为一个完美数,如果它的因数, 包括 1(但不包括数字本身),求和。为了 例如,6 是一个完美数,因为 6=1+2+3。写法完美 确定 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)

【问题讨论】:

  • 除了我猜想的地方没有显示的“因素”
  • 如果是这个问题,那是因为你在 if 之前调用了 perfect(num) 所以它在完美数之前输出因子,然后我怀疑 printf(a, b)
  • 是的,这就是问题所在。那么我将如何修复程序的顺序以使其与我显示的输出一样?
  • 你最终得到正确的输出了吗?
  • 抱歉,回复晚了,但我从来没有得到正确的输出,但我的教授让程序滑动,因为我做对了。

标签: java methods perfect-numbers


【解决方案1】:

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

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

或者

  • 您可以将打印... is perfect 的行移到方法本身中。然后从main 中删除整个if 块。

【讨论】:

  • 当我从 main 中删除 if 块时,会导致错误。
  • 如果您告诉我们错误是什么,也许有人可以帮助您。当然,您仍然需要在for 循环内调用perfect(num),但我认为这不言而喻。
  • 如果你的意思是删除 if(perfect(num)), id 会导致错误,因为它不会检查 num 是否为真。很抱歉,如果我没有得到很好的答复,我很抱歉。
【解决方案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+" ");
                }
            }
        }
    }
}
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;
}
}

【讨论】:

  • 对不起,我没有检查是否工作,但订单似乎更好这样。 “完美”方法不需要输出任何东西,它的目标只是检查数字是否完美
  • 运行:6 是完美的。因素:1 2 3 28 是完美的。因素:1 2 4 7 14 496 是完美的。因素:1 2 4 8 16 31 62 124 248 构建成功(总时间:0 秒)是我从你那里得到的。仍然没有得到正确的输出,但似乎更接近感谢到目前为止的帮助!
  • 你只需要添加line return no?
【解决方案3】:

试试这个

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

【讨论】:

    【解决方案4】:
    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 2021-02-22
      相关资源
      最近更新 更多