【问题标题】:Constructor undefined while using multiple classes使用多个类时构造函数未定义
【发布时间】:2023-03-23 18:46:01
【问题描述】:

我有一个问题。我第一次在 JAVA 中处理多个类。我在做这件事时遇到了一些麻烦。我创建了一个类,我将从另一个类中调用它。我想创建一个类型Coordinate,顾名思义,它包含坐标。然后,我想移动这些坐标。到目前为止,代码如下所示:

public class Coordinate {
    double x;
    double y;

    Coordinate(){
        x=0;
        y=0;
    }

    public Coordinate(int x, int y){
        this.x = x;
        this.y = y;
        System.out.print(x);//TO TEST WHETHER IT DOES SOMETHING
    }

    Coordinate shiftCoordinate(int z, int w){
        this.x = x + z;
        this.y = y+ w;
        return new Coordinate(x,y);//ERROR: The constructor Coordinate(double, double) is undefined
    }


}

它在声明的地方抛出一个错误。我不明白这个错误。在我的“主要”课程中,我做了以下事情:

void start() {

    Coordinate coordinate = new Coordinate();
    coordinate.x=3;
    coordinate.y=4; 
}

我希望这会打印3,但事实并非如此。我哪里错了?

【问题讨论】:

  • 您提到的错误准确地解释了问题所在。如果要使用构造函数Coordinate(x,y),则必须创建它。除非你自己写,否则不存在这样的构造函数。

标签: java class constructor


【解决方案1】:

首先,您不使用多个类,只有一个:Coordinate,但您需要多个构造函数。

  1. 由于你的属性是double,所以创建一个需要该类型的构造函数,它将在你编写new Coordinate(5,6)时使用

    public Coordinate(double x, double y) {
        this.x = x;
        this.y = y;
    }
    
  2. 如果您想要一个默认构造函数(无参数),它将在您调用new Coordinate()时使用它

  3. 您想要一种从Coordinate 实例转移的方法,您有两种方法:修改当前实例创建一个新实例,但不要同时执行这两种操作(就像您的代码一样)最后得到两个具有相同值的对象没有用

    // modify current instance
    void shiftCoordinate(double z, double w) {
        this.x = x + z;
        this.y = y + w;
    }
    
    // return a new object
    Coordinate shiftCoordinate(double z, double w) {
        return new Coordinate(this.x + z, this.y + w);
    }
    

你最后的代码使用没有参数的默认构造函数,所以你看不到任何打印使用new Coordinate(3,4) 来查看它是正常的


一个经典的构造函数也是,克隆一个实例的构造函数,它接受一个实例并创建一个具有相同值的新实例:

    public Coordinate(Coordinate clone) {
        this.x = clone.x;
        this.y = clone.y;
    }

【讨论】:

  • 谢谢!所以,如果我是正确的,每个类你只能有一个构造函数。这个构造函数要么接受参数,要么不接受,但你不能同时拥有。对吗?
  • @Mathbeginner 不,你可以拥有任意数量的构造函数,它们只需要采用不同的参数
  • 但在我的代码中,我有一个不带参数的构造函数和一个带两个整数的构造函数。为什么我会收到那个错误说带有该输入的构造函数未定义?
  • @Mathbeginner 你有一个构造函数,它采用 ints 并且你的参数是 doubles,请完整阅读我的答案并使用它的代码;)跨度>
【解决方案2】:
public Coordinate(int x, int y){
    this.x = x;
    this.y = y;
    System.out.print(x);
}

此构造函数的参数是整数,而您正试图传入双精度数。将构造函数更改为:

public Coordinate(double x, double y){
    this.x = x;
    this.y = y;
    System.out.print(x);
}

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多