2

さて、私はここで本当にイライラしています。私は今学期、プログラミング入門クラスの第 2 部を受講しています。前学期は C++ をやっていましたが、今は Java をやっています。私の意見では、私たちはすべてにかなり早く飛び込みました。これは、C++ の知識を Java に適用することが期待されているためだと思います。これは一理あると思います。理解しようとしてGoogleなどを精査していたので、今はただ怒っています。

RectangleDemo と Rectangle の 2 つのファイル/クラスがあります。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 コンストラクターを追加すると、「コードを追加しているので、これで問題が発生することはありません」と考えた後、突然そのコードが壊れます。これは、黙ってコードも削除しているためです。

覚えておくべき良いルールの 1 つ: コンストラクターのないクラスが他のユーザーによって使用されている場合、args コンストラクターを定義する場合は、常に引数なしのコンストラクターも追加してください。

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

}

これは Rectangle オブジェクトのコンストラクタです。これは、四角形オブジェクトを作成するときに、2 つの double を渡す必要があることを意味します。1 つ目は長さ、2 つ目は幅です。あなたはこれを持っています:

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は 2 つの引数を取ります。あなたは何も渡していません。

于 2013-02-03T01:23:12.240 に答える