为了账号安全,请及时绑定邮箱和手机立即绑定

Java 未定义的构造函数

Java 未定义的构造函数

www说 2023-09-20 17:29:26
我编写了一个小程序,其中包含三个类:Carpet、Calculator和Floor。通过使用 main 中的计算器类,将调用地毯类与地板类相乘。但是,我发现当在计算器类中使用 double 作为返回类型时,我遇到了构造函数未定义的错误。我发现是计算器类的问题,我有一个方法getTotalCost()可以返回地板和地毯的成本。为什么我在 main.c 中调用时不能仅将两个对象作为计算器中的参数传递?我在计算器类中使用了 double 的原始返回类型。请帮我重写计算器类,并向我解释为什么我不能使用原始类型类,而必须在地板和地毯的计算器字段声明中使用类名。为什么必须将地板和地毯的类名传递到构造函数中才能构建对象?如果您使用类名声明两个实例字段,那么修复方法是什么getTotalCost(),那么错误肯定会是这样的:- The operator * is undefined for the argument     type(s) Floor, Carpet- Occurrence of 'carpet'- 1 changed line尝试使用创建的类但收到错误。Carpet carpet = new Carpet(3.5);Floor floor = new Floor(2.75, 4.0);在计算器的参数中传递地板和地毯。//未定义构造函数 Calculator Calculator = new Calculator(floor,carpet);
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

由于您的Calculator类只有默认构造函数(没有任何参数的构造函数)和一个仅接受 的构造函数double, double,因此您无法创建Calculator提供Carpet实例和Floor实例的实例。

所以你有两个选择:

  1. 将建筑面积和地毯成本传递给当前建造者。

    Calculator calculator = new Calculator(floor.getArea(), carpet.getCost());

  2. 更改构造函数以接受一个Carpet实例和一个Floor实例(那么您的Calculator类逻辑也应该修改)

public class Calculator {


    private Floor floor;

    private Carpet carpet;


    public Calculator() {

    }


    public Calculator(Floor floor, Carpet carpet) {

        this.carpet=carpet;

        this.floor=floor;

    }


    public double getTotalCost() 

    {

        return (this.floor.getArea() * this.carpet.getCost());

    }

}


查看完整回答
反对 回复 2023-09-20
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

你不能乘以物体。看起来,你想在地板上铺上地毯然后得到……什么东西?这不是这样的,想得更深一点——事实是你真的想将地毯的平方(更具体地说是平方米的数量)乘以 1 平方米的成本(货币数量)。当您理解这一点时,您应该可以轻松地更正您的代码,因此地板地毯字段并能够根据地板面积和地毯成本计算总成本


查看完整回答
反对 回复 2023-09-20
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

Calculator 类的参数是(double, double)这样的,因此它不会接受 Floor 和 Carpet 对象。您可以像这样调用构造函数:


Calculator calc = new Calculator(carpet.getCost(), floor.getCost());

或者将构造函数更改为以下内容:


Calculator (Floor f, Carpet c) {

    this.floor = f.getCost();

    this.carpet = c.getCost();

}


查看完整回答
反对 回复 2023-09-20
  • 3 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信