完美的数字方法

时间:2013-04-09 09:13:30

标签: java methods types perfect-numbers

该程序应该接受用户输入并确定它是否是一个完美的数字。当我尝试编译它时,我得到错误类scalvert_Perfect中的方法testPerfect不能应用于给定的类型;

  • testPerfect(NUM);
  • 必需:int,int
  • 发现:int
  • 原因:实际和正式的参数列表长度不同

我的代码:

import java.util.Scanner;

public class scalvert_Perfect
{
public static void main ( String args[] ) 
{
    Scanner input = new Scanner(System.in);
    int test;
    int num = 0;
    int counter = 0;

    do
    {
        System.out.print("How many numbers would you like to test? ");
        test = input.nextInt();

    }while(test < 1);

    do
    {
        System.out.print("Please enter a possible perfect number: ");
        num = input.nextInt();

        testPerfect(num);
        printFactors(num);

        counter++;

    }while(counter < test);
}


    public static boolean testPerfect(int num, int test)
    {
        int sum = 0;

        for(int i = 0; i < test ; i++)
            {
                if(num % i == 0)
                {
                sum += i;
                }       

            }
                if(sum == num)
                {
                return true;
                }
                else
                {
                return false;
                }
    }       

    public static void printFactors(int num)
    {
        int x;
        int sum = 0;

        for(int factor = num - 1 ; factor > 0; factor--)
            {
                x = num % factor;

                if (x == 0)
                {
                    sum = sum+factor;
                }
            }
                if(sum != num)
                {
                    System.out.printf("%d:NOT PERFECT",num);
                }

            if(sum == num)
                {       
                    System.out.printf("%d: ",num);

                        for(int factor=1; factor < num; factor++)
                            {       
                                x = num % factor;
                                if(x == 0)
                                {
                                    System.out.printf("%d ",factor);
                                }
                            }               
                }
                System.out.print("\n");
                sum = 0;
    }


}

7 个答案:

答案 0 :(得分:4)

你的功能需要两个整数:

public static boolean testPerfect(int num, int test)

你在这里用一个整数来调用它:

 testPerfect(num);

这正是错误所说的:

功能:

testPerfect(num);

需要两个整数

required :int, int

但你用一个叫它:

found: int

所以错误是因为参数的数量不正确:

reason: actual and formal argument list differ in length

答案 1 :(得分:1)

代码应该将测试传递给testPerfect方法,因为方法的签名是testPerfect(int,int)。原始调用仅将int传递给方法。

 do
    {
        System.out.print("Please enter a possible perfect number: ");
        num = input.nextInt();

        testPerfect(num,test);
        printFactors(num);

        counter++;

    }while(counter < test);

答案 2 :(得分:0)

使用

testPerfect(int num, int test)

您使用了一个参数

答案 3 :(得分:0)

testPerfect方法有两个参数int numint test

testPerfect(num);应该产生编译器错误,因为不存在testPerfect(int)

你需要传递两个像testPerfect(num, test)一样的游侠。

答案 4 :(得分:0)

你的函数需要传递两个int个参数,但你只传递一个:

testPerfect(num);

在调用它时尝试将两个传递给它。

答案 5 :(得分:0)

你在说这个:

public static boolean testPerfect(int num, int test)
像这样:

testPerfect(num);

您要么在通话中缺少参数,要么在方法签名中要求太多。

答案 6 :(得分:0)

 public static void main(String[] args) {
    int n=25;
    for(int i=0;i<=n;i++)
    {
        int v= i*i;
        if(v == n)
        {
            System.out.println("it is a perfect number");
        }
    }
}