猿问

Java 未定义的构造函数

我编写了一个小程序,其中包含三个类: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);


www说
浏览 111回答 3
3回答

慕桂英3389331

由于您的Calculator类只有默认构造函数(没有任何参数的构造函数)和一个仅接受 的构造函数double, double,因此您无法创建Calculator提供Carpet实例和Floor实例的实例。所以你有两个选择:将建筑面积和地毯成本传递给当前建造者。Calculator calculator = new Calculator(floor.getArea(), carpet.getCost());更改构造函数以接受一个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());    }}

30秒到达战场

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

回首忆惘然

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();}
随时随地看视频慕课网APP

相关分类

Java
我要回答