Java 实际参数和形式参数的长度不同-don';我不知道为什么
我是一个Java程序员初学者,我有两个简单的文件来解决一个简单的数学问题。其中一个调用另一个,计算数字的阶乘(例如,4!=24)。由于某种原因,我无法调用Java 实际参数和形式参数的长度不同-don';我不知道为什么,java,constructor,Java,Constructor,我是一个Java程序员初学者,我有两个简单的文件来解决一个简单的数学问题。其中一个调用另一个,计算数字的阶乘(例如,4!=24)。由于某种原因,我无法调用阶乘构造函数 下面是调用类: package Permutations; import Permutations.Factorial; public class Permutations { public static void main(String args[]) { System.out.println("The
阶乘
构造函数
下面是调用类:
package Permutations;
import Permutations.Factorial;
public class Permutations {
public static void main(String args[]) {
System.out.println("There are 10 students. Five are to be chosen and seated in a row for a picture. How many linear arrangements are possible?");
System.out.println(new Factorial(10) / new Factorial(5));
}
}
这是阶乘
类
package Permutations;
public class Factorial {
public long Factorial(int num) {
long result = 1;
for(int i = num; i > 0; i--)
result *= i;
return result;
}
}
以下是错误:
Permutations\Permutations.java:7: error: constructor Factorial in class Factoria
l cannot be applied to given types;
System.out.println(new Factorial(10) / new Factorial(5));
^
required: no arguments
found: int
reason: actual and formal argument lists differ in length
Permutations\Permutations.java:7: error: constructor Factorial in class Factoria
l cannot be applied to given types;
System.out.println(new Factorial(10) / new Factorial(5));
^
required: no arguments
found: int
reason: actual and formal argument lists differ in length
2 errors
我可以将它更改为静态方法,但是我必须使用Factorial.Factorial(num)
调用它,而不是newfactorial(num)
,这会很不方便
我不知道为什么会这样。请帮忙
谢谢
编辑
谢谢你的回答。我已经知道我做错了什么。构造函数不能具有用户定义的返回类型: 它们可以是:
public constructor(parameter p){
// TO DO SOMETHING
}
您不能将值作为
新内容()传入System.out.println()
代码>。只能传递具有某种返回类型的方法。构造函数不能具有用户定义的返回类型:
它们可以是:
public constructor(parameter p){
// TO DO SOMETHING
}
您不能将值作为新内容()传入System.out.println()
代码>。只有具有某种返回类型的方法才能被传递。首先,您编写的不是构造函数。构造函数没有返回类型
因此,在没有构造函数的情况下,您的类定义了一个不带参数的默认构造函数(这是编译器尽职尽责地告诉您使用的构造函数,因为您尝试创建一个新实例)
解决方案:
使用静态方法,而不是尝试使用实例。似乎是最实用的方法
如果必须使用类,因为它是家庭作业,请定义构造函数和getFactorial
方法。getFactorial
可能有一个返回类型,并为您提供所需的值。你将不得不在类似的事情中使用它
Factorial fac1 = new Factorial(5);
System.out.println("Factorial " + fac1.getFactorial());
甚至
System.out.println("Factorial " + (new Factorial(5)).getFactorial());
通常为了可读性,首选第一个版本
首先,您编写的不是构造函数。构造函数没有返回类型
因此,在没有构造函数的情况下,您的类定义了一个不带参数的默认构造函数(这是编译器尽职尽责地告诉您使用的构造函数,因为您尝试创建一个新实例)
解决方案:
使用静态方法,而不是尝试使用实例。似乎是最实用的方法
如果必须使用类,因为它是家庭作业,请定义构造函数和getFactorial
方法。getFactorial
可能有一个返回类型,并为您提供所需的值。你将不得不在类似的事情中使用它
Factorial fac1 = new Factorial(5);
System.out.println("Factorial " + fac1.getFactorial());
甚至
System.out.println("Factorial " + (new Factorial(5)).getFactorial());
通常为了可读性,首选第一个版本
类中没有接受长参数的构造函数。您错了,因为此方法是构造函数:
public long Factorial(int num)
构造函数没有返回类型。正如您提到的上述签名的返回类型,因此它已成为一个普通方法,而不是构造函数
当类中没有编写构造函数时,编译器会提供一个无参数构造函数,因此会抛出一个错误,原因如下:
原因:实际参数列表和正式参数列表长度不同
类中没有接受长参数的构造函数。您错了,因为此方法是构造函数:
public long Factorial(int num)
构造函数没有返回类型。正如您提到的上述签名的返回类型,因此它已成为一个普通方法,而不是构造函数
当类中没有编写构造函数时,编译器会提供一个无参数构造函数,因此会抛出一个错误,原因如下:
原因:实际参数列表和正式参数列表长度不同
当你宣布
public long Factorial(int num)
,这不是阶乘的构造函数,因为它的类型与。构造函数必须声明如下:
public Factorial(int num)
由于您尚未声明构造函数,因此现有的唯一构造函数是默认构造函数,它不接受任何参数,因此当您调用
new Factorial(10)
您会得到一个错误,因为新的阶乘不接受只有现有构造函数的参数
编辑:而且,即使你解决了这个问题,你也不能
new Factorial(10) / new Factorial(5)
因为除法不是在阶乘上定义的。当您声明
public long Factorial(int num)
,这不是阶乘的构造函数,因为它的类型与。构造函数必须声明如下:
public Factorial(int num)
由于您尚未声明构造函数,因此现有的唯一构造函数是默认构造函数,它不接受任何参数,因此当您调用
new Factorial(10)
您会得到一个错误,因为新的阶乘不接受只有现有构造函数的参数
编辑:而且,即使你解决了这个问题,你也不能
new Factorial(10) / new Factorial(5)
因为除法不是在阶乘上定义的。首先,请参阅有关命名包、类和方法的
其次,您混淆了类的构造函数和方法。构造函数与类具有相同的名称,并且没有返回值。它与new关键字一起用于生成类的实例
您已经编写了一个名为“Factorial”的方法,返回类型为int(请参见为什么应该使用小写的编码指南)。由于您的类缺少构造函数,Java添加了一个没有参数的默认构造函数。但您尝试使用int参数调用构造函数。这就是为什么会出现错误
要在对象Factorial上调用方法Factorial,需要生成一个新实例并使用int参数调用该方法。像这样:
int fact = new Factorial().Factorial(5)
但是,对于您的示例,不需要创建对象,因此可以使用静态方法factorial 首先,有关命名包、类和方法的信息,请参阅
其次,您混淆了类的构造函数和方法。构造函数与类具有相同的名称,并且没有返回值。它与n一起使用