0

私はこれまでこのコードをうまく機能させましたが、このメソッドを完成させて、使用されたサイドの合計量をコンパイルし、最後の印刷行にその値を印刷する方法を学ぼうとしています。問題のメソッドはgetTotalSidesです。現在、0を返すように設定していますが、代わりに合計辺を返すように設定しています。つまり、mp1.getSides()+ mp2.getSides()+ mp3.getSides()+ mp4.getSides( )。

public class TestParts {

public static void main(String[] args) {

    MyPolygon mp1 = new MyPolygon();
    MyPolygon mp2 = new MyPolygon(4);
    MyPolygon mp3 = new MyPolygon(5);
    MyPolygon mp4 = new MyPolygon(6);
    System.out.println("Polygon 1 has " + mp1.getSides()
            + " sides, angles total " + mp1.getSumOfAngles());
    System.out.println("Polygon 2 has " + mp2.getSides()
            + " sides, angles total " + mp2.getSumOfAngles());
    System.out.println("Polygon 3 has " + mp3.getSides()
            + " sides, angles total " + mp3.getSumOfAngles());
    System.out.println("Polygon 4 has " + mp4.getSides()
            + " sides, angles total " + mp4.getSumOfAngles());
    System.out.println("There are " + MyPolygon.getTotalSides()
            + " total sides");

}
}

class MyPolygon {
double getSides;

MyPolygon() {
    getSides = 3;
}

static double getTotalSides() {

    return 0;
}

double getSides() {
    // TODO Auto-generated method stub
    return getSides;
}

MyPolygon(double newGetSides) {
    getSides = newGetSides;
}

double getSumOfAngles() {
    return ((getSides - 2) * 180);
}

void setGetSides(double newGetSides) {
    getSides = newGetSides;
}
4

4 に答える 4

1

本当にメソッドが必要な場合は、次の目的でvarargs(可変アリティ引数)を使用できます。

static double getTotalSides(MyPolygon... polygons) {
  double x = 0;

  for (MyPolygon p: polygons)
  {
   x+= p.getSides();
  }
   return x;
}

次に、次のように呼び出します。

System.out.println("There are " + MyPolygon.getTotalSides(mp1,mp2,mp3,mp4)
            + " total sides");

または配列を作成します

MyPolygon myPolygons = new MyPolygon [4];
myPolygons [0] = mp1;
myPolygons [1] = mp2;
myPolygons [2] = mp3;
myPolygons [3] = mp4;
System.out.println("There are " + MyPolygon.getTotalSides(myPolygons)
            + " total sides");

ただし、より良い解決策は、ポリゴンを最初から配列/リストに格納してから、その配列/リスト全体をメソッドに渡し、ループを実行して、結果を返すことです。ただし、リストと配列は異なるため、それに応じてメソッドのシグネチャを変更する必要があることに注意してください。

于 2013-02-17T22:43:54.557 に答える
0

これまでに作成されたすべての辺の数に関するグローバル情報が必要な場合は、静的変数を試してください。

class MyPolygon {

    private static int totalSides;
    private int sides;

    MyPolygon() {
        this(3); // constructor chaining: really useful
    }

    MyPolygon(int numSides) {
        this.sides = numSides;
        MyPolygon.totalSides += numSides;
    }

    // ... the rest, incl. getter for sides and static getter for totalSides

}

ただし、1つのポリゴンが不要になった場合は、どういうわけか、明示的に数を減らす必要があります...

于 2013-02-17T22:57:48.047 に答える
0

書いた表現を入れてみませんか:

System.out.println("There are " + (mp1.getSides() + mp2.getSides() + mp3.getSides() + mp4.getSides()) + " total sides");

クラスの一部としてgetTotalSidesを記述しようとしているため、他のすべてのインスタンス化されたオブジェクトをチェックし、それらのメソッドgetSidesを呼び出してすべての合計サイドを合計する簡単な方法はありません。すべてのポリゴンオブジェクトを取得して辺を合計する関数を定義することはできますが、クラス定義の下に置くことはできません。

于 2013-02-17T22:43:43.200 に答える
0

あなたはあなたのオブジェクトのを見る必要がありscopeます、多分あなたはある種の種類を使うことができますCollection

public class TestParts {

    public static void main(String[] args) {

        final MyPolygon mp1 = MyPolygon.newInstance(3);
        final MyPolygon mp2 = MyPolygon.newInstance(4);
        final MyPolygon mp3 = MyPolygon.newInstance(5);
        final MyPolygon mp4 = MyPolygon.newInstance(6);
        System.out.println("Polygon 1 has " + mp1.getSides()
                + " sides, angles total " + mp1.getSumOfAngles());
        System.out.println("Polygon 2 has " + mp2.getSides()
                + " sides, angles total " + mp2.getSumOfAngles());
        System.out.println("Polygon 3 has " + mp3.getSides()
                + " sides, angles total " + mp3.getSumOfAngles());
        System.out.println("Polygon 4 has " + mp4.getSides()
                + " sides, angles total " + mp4.getSumOfAngles());
        System.out.println("There are " + MyPolygon.getTotalSides()
                + " total sides");

    }
}

class MyPolygon {

    private static final Collection<MyPolygon> POLYGONS = new LinkedList<MyPolygon>();
    private final double sides;

    private MyPolygon(final double sides) {
        this.sides = sides;
    }

    public static MyPolygon newInstance(final double sides) {
        final MyPolygon polygon = new MyPolygon(sides);
        POLYGONS.add(polygon);
        return polygon;
    }

    public static double getTotalSides() {
        double sides = 0d;
        for (final MyPolygon polygon : POLYGONS) {
            sides += polygon.getSides();
        }
        return sides;
    }

    public double getSides() {
        return sides;
    }

    public double getSumOfAngles() {
        return ((sides - 2) * 180);
    }
}

getSides命名規則(変数なし)に準拠するようにコードを整理しました。

于 2013-02-17T22:45:55.320 に答える