2017-03-11 6 views
0

javaの簡単な描画プログラムのコードセクションに問題があります。私はその後、器具内のオブジェクトの数をカウントすることになっている「サイズ」と呼ばれるクラスを持っているJava訪問者の返品の問題

public static final Shape simpleGroup = new Group(
     new Location(200, 100, new Circle(50)), 
     new Location(400, 300, new Rectangle(100, 50)) 
    ); 

    public static final Shape middleGroup = new Location(50, 100, 
     new Group(
     new Outline(new Rectangle(50, 30)), 
     new Group(
    new Circle(20), 
    new Rectangle(50, 30) 
     ) 
     ) 
    ); 

    public static final Shape complexGroup = new Location(50, 100, 
     new Group(
     new Circle(20), 
     new Rectangle(100, 200), 
     new Location(150, 50, 
     new Stroke(Color.RED, 
      new Fill(
      new Group(
       new Rectangle(50, 30), 
       new Outline(new Rectangle(300, 60)), 
       new Stroke(Color.CYAN, 
       new Polygon(
        new Point(50, 50), 
        new Point(60, 100), 
        new Point(100, 110), 
        new Point(120, 60) 
       ) 
      ), 
       new Location(100, 200, 
       new Stroke(Color.MAGENTA, 
        new Outline(new Circle(50)) 
       ) 
      ) 
      ) 
     ) 
    ) 
) 
) 
); 

:私は、コードを持っている「備品」と呼ばれるクラスを持っています。私はgroupimpleが2を返し、groupmiddleが3を返し、groupcomplexが6を返すと主張するテストクラスを持っています。私はサイズコードを修正するはずですが、私はそれを理解できません。

@Override 
public Integer onGroup(final Group g) { 
    return null; 
} 

グループクラスのコード:

public class Group implements Shape { 

    protected final List<? extends Shape> shapes; 

    public Group(final Shape... shapes) { 
     this.shapes = Arrays.asList(shapes); 
    } 

    public List<? extends Shape> getShapes() { 
     return Collections.unmodifiableList(shapes); 
    } 

    @Override 
    public <Result> Result accept(final Visitor<Result> v) { 

     return v.onGroup(this); 
    } 

ありかかわる複数のクラスがありますが、私はこれが私のポイントを表示するのに十分であるべきだと思います。どんな助けでも大歓迎です。

+1

ようこそ!デバッグの助けを求める質問( "なぜこのコードは動作しないのですか?")には、目的の動作、_a特定の問題またはerror_を含める必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) –

答えて

0

ビジターが正確に何をすると思われていたのか、groupcomplexのサイズが例えば6であるのかを教えてくれなかったので、少し不明です。しかし、あなたが望むのは次のようなものだと思います。

@Override 
public Integer onGroup(Group g) { 
    int count = 0; 
    for (Shape shape: g.getShapes()) { 
     count += shape.accept(this); 
    } 
    return count; 
} 

@Override 
public Integer onRectangle(Rectangle r) { 
    return 1; 
} 

// same for other shapes 
関連する問題