0

这个程序应该接受用户输入并确定它是否是一个完美的数字。当我尝试编译它时,我得到错误 Method testPerfect in class scalvert_Perfect cannot be applied to given types;

  • 测试完美(数字);
  • 必需: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;
    }


}
4

7 回答 7

4

您的函数需要两个整数,因为:

public static boolean testPerfect(int num, int test)

你在这里用 1 个整数调用它:

 testPerfect(num);

顺便说一句,这正是错误所说的:

功能:

testPerfect(num);

需要两个整数

required :int, int

但是你用一个来称呼它:

found: int

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

reason: actual and formal argument list differ in length
于 2013-04-09T09:15:01.663 回答
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);
于 2013-04-09T09:16:33.637 回答
0

采用

testPerfect(int num, int test)

你使用了一个参数

于 2013-04-09T09:15:42.073 回答
0

testPerfect方法有两个参数int numint test

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

您可能需要传递两个参数 Like testPerfect(num, test)

于 2013-04-09T09:15:58.493 回答
0

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

testPerfect(num);

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

于 2013-04-09T09:16:33.893 回答
0

你这样称呼:

public static boolean testPerfect(int num, int test)

像这样:

testPerfect(num);

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

于 2013-04-09T09:17:45.740 回答
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");
        }
    }
}
于 2014-05-22T15:45:06.123 回答