0

这是我第一次尝试用“构造函数”做任何事情,经过一个小时左右的时间四处寻找关于这个主题的帮助,我仍然觉得我不知道我在做什么。

所以这是我为另一个程序创建的类文件,它应该有 2 个构造函数。我尽力了,但编译器一直告诉我我需要标识符。

如何识别构造函数?

   public class property
{
int storey = 0;
int width = 0;
int length = 0;

    property(int storey, int width, int length)
    {
        {
        this.storey = storey;
        this.width = width;
        this.length = length;
        }

    }

    property(int width, int length)
    {
        this(1, width, length);

    }


    public int calculateArea(int area)
    {

        return (storey * width * length);

    }

    public double calculatePrice(double price)
    {

       return (((storey * width * length) * 2.24) *1.15);

    }

}
4

5 回答 5

3

编译器告诉您需要指定p1p2变量应该是什么类型。例如:

property(int p1)
{
  // constructor
}

其他一些建议:

  • 类名应该是大写的驼峰式,即Property.
  • 两个构造函数都在为自己分配字段,您应该指定storey, width, 和length作为构造函数参数,然后使用this关键字将它们分配给字段:

Property(int storey, int width, int length)
{
  this.storey = storey;
  this.width = width;
  this.length = length;
}
  • 当您想在构造函数中设置默认值时,您可以调用其他构造函数:

Property(int width, int length)
{
  this(1, width, length);
}
  • calculateAreacalculatePrice应返回计算值。分配给参数将无效:

public int calculateArea()
{
    return (storey * width * length);
}
  • 为属性的字段添加访问器:

public int getStorey()
{
    return storey;
}

然后,您可以使用您的财产,如:

BufferedReader br = new BufferedReader(System.in); 
System.out.println("storey: ");     
int storey = Integer.parseInt(br.readLine()); 

System.out.println("width: ");     
int width = Integer.parseInt(br.readLine()); 

System.out.println("length: "); 
int length = Integer.parseInt(br.readLine()); 

Property p = new Property(storey, width, length); 
System.out.println("property dimensions:width " + p.calculateArea()); 
System.out.println("width: " + p.getWidth()); 
System.out.println("length: " + p.getLength()); 
System.out.println("storeys: " + p.getStoreys()); 
System.out.println("area: " + p.calculateArea());
System.out.println("price: " + p.calculatePrice());    
于 2013-05-28T02:45:46.577 回答
1

构造函数需要知道什么类型p1p2是什么。您可能想要对这些值做一些事情,例如,您可以将 p1 或 p2 的值分配给宽度或长度。

你已经写了if(storey >> 1)——你不是说if (storey > 1)吗?

storey此外,如果不是 1 ,我还会为构造函数提供一些默认值。比如:

property(int s, int w, int l)
{
    if (l > 1)
    {
        storey = s;
        width = w;
        length = l;
    }
    else
    {
        storey = 0;
        width = 0;
        length = 0;
    }
}
于 2013-05-28T02:48:27.253 回答
0

您需要指定构造函数参数的类型,这里p1p2

例如:

property(int p2)
于 2013-05-28T02:45:46.110 回答
0

这里需要指定数据类型。编译器如何知道它们是什么类型

 property(p1) 

例子: property(int p1)

于 2013-05-28T02:46:18.067 回答
0

你传递给你的构造函数需要有一个与之关联的类型p1p2所以你会这样:

public property(int p1)
{
    //do something
}
于 2013-05-28T02:46:26.337 回答