2

好吧,我在这里真的很沮丧。本学期我将参加编程课程介绍的第二部分。上学期我们做了 C++,现在我们在做 JAVA。在我看来,我们已经很快进入了一切。我相信这是因为我们希望将我们的 C++ 知识应用于 JAVA,因为它们有些相似。我想这是有道理的。我现在很生气,因为我一直在搜索谷歌等以试图理解。

有两个文件/类 - RectangleDemo 和 Rectangle。RectangleDemo 是主要的。我们被要求编写可以计算面积和周长的代码。我的问题是这个。当我添加一个新的构造函数时,我的原始类及其在“RectangleDemo”中的对象现在不起作用。此外,我的编译器找不到新构造函数的符号。

这是代码...

public class RectangleDemo {
    public static void main(String[] args) {
        Rectangle myRect = new Rectangle();

        double theArea;
        double thePerimeter;

        myRect.setLength(25);
        myRect.setWidth(5);

        theArea = myRect.area();

        thePerimeter = myRect.perim();

        System.out.println("My rectangle has area " + theArea);
        System.out.println("Rectangle Perimiter " + thePerimeter);

        Rectangle newRect = new Rectangle(10, 20);

    }
}

public class Rectangle {

    private double width, length;
    private double len, wid;

    public void setWidth(double w) {
        width = w;
    }

    public void setLength(double ln) {
        length = ln;
    }

    public double getWidth() {
        return width;
    }

    public double getLength() {
        return length;
    }

    public double area() {
        double a;
        a = length * width;
        return a;
    }

    public double perim() {
        double pr;
        pr = (length * 2) + (width * 2);
        return pr;
    }

    public Rectangle(double len, double wid) {
    }
}

对代码块感到抱歉,在 Safari 中缩进对我来说有点奇怪。

'Rectangle' 类编译没有错误。

但是'RectangleDemo'类编译器错误是这样的。

 ----jGRASP exec: javac -g RectangleDemo.java
RectangleDemo.java:5: cannot find symbol
symbol  : constructor Rectangle()
location: class Rectangle
        Rectangle myRect = new Rectangle ();

我正在运行 OSX 10.7.5 的 07 Macbook 上编译

我还没有在构造函数的代码中添加任何东西,因为我什至无法让程序找到它而不会出错。

我一直在做的所有阅读都有助于我更多地了解 JAVA,但我对这个程序束手无策。更糟糕的是,我敢打赌这只是我的一个愚蠢的小错字。

4

3 回答 3

7

我认为您缺少的一块拼图是这个小的java gem

  • 当你定义任何构造函数时,有一个隐式的无参数构造函数。
  • 当你定义一个带参数的构造函数时,隐式的无参数构造函数就会消失。

这吸引了许多不熟悉 java 的程序员(我承认,它吸引了我)。


对此特别出乎意料的是,您可以让客户端使用一个类(没有构造函数),然后添加一个 args 构造函数,然后您认为“我正在添加代码,所以这不会引起任何问题”,然后突然他们的代码休息。那是因为你也在默默地删除代码。

要记住的一个好规则是:如果您有一个无构造函数的类被其他人使用,并且您定义了一个 args 构造函数,请始终添加一个无参数的构造函数。

于 2013-02-03T01:28:06.190 回答
1
public Rectangle (double len, double wid) {

}

这是 Rectangle 对象的构造函数。这意味着当你创建一个矩形对象时,你需要传递两个双精度值,第一个是长度,第二个是宽度。你有这个:

Rectangle myRect = new Rectangle ();

但这不是发送所需的参数。您正在尝试为不带参数的矩形调用构造函数。例如,您应该将其更改为:

Rectangle myRect = new Rectangle (1.5, 2.3);

这将制作一个长度为 1.5 和宽度为 2.3 的 Rectangle 对象

希望这可以帮助,

于 2013-02-03T01:25:43.283 回答
0

错误是完全正确的。

类中唯一的构造函数Rectangle有两个参数;你没有通过任何。

于 2013-02-03T01:23:12.240 回答