2017-03-11 2 views
0

Ich habe Probleme mit einem Codeabschnitt für ein einfaches Zeichenprogramm in Java. Ich habe eine Klasse namens „Leuchten“, die den Code hat:Java Besucher zurück Problem

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)) 
       ) 
      ) 
      ) 
     ) 
    ) 
) 
) 
); 

Ich habe dann eine Klasse namens „Größe“, die angeblich die Anzahl der Objekte in Vorrichtungen zu zählen. Ich habe eine Testklasse, die behauptet, dass groupsimple 2 zurückgibt, groupmiddle returns 3 und groupcomplex 6 zurückgibt. Ich soll den Größencode korrigieren, aber ich kann es nicht herausfinden.

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

Die Gruppe Klasse Code:

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); 
    } 

Es gibt mehr Klassen beteiligt, aber ich denke, das sollte genug sein meinen Punkt zu zeigen. Jede Hilfe würde sehr geschätzt werden.

+1

Willkommen bei Stack Overflow! Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der zur Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). –

Antwort

0

Ein bisschen unklar, weil Sie nicht gesagt haben, was der Besucher genau tun sollte, und warum die Größe von groupcomplex zum Beispiel 6 ist. Aber ich denke, alles, was Sie wollen, ist so etwas wie:

@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