Java 实际参数和形式参数的长度不同-don';我不知道为什么

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

我是一个Java程序员初学者,我有两个简单的文件来解决一个简单的数学问题。其中一个调用另一个,计算数字的阶乘(例如,4!=24)。由于某种原因,我无法调用
阶乘
构造函数

下面是调用类:

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一起使用