该程序应该接受用户输入并确定它是否是一个完美的数字。当我尝试编译它时,我得到错误类scalvert_Perfect中的方法testPerfect不能应用于给定的类型;
我的代码:
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;
}
}
答案 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 num
和int 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");
}
}
}