使用类名从Java Vector中检索对象

时间:2012-11-30 12:59:26

标签: java string object vector

我将首先解释一下这个场景。 我必须创建一个Vector来保存一个Circles列表。 然后我创建一个圆形对象,并将其添加到Vector。 最后,我必须在列表中打印每个圆圈的状态(状态不是很重要,只有它的颜色和位置等)。

基本上我的问题是,如何抓住圆圈以便我可以传递其中一个的名称,它将打印正确的圆圈状态。向你展示我的代码可能会更清楚。

我有3个类,一个名为Lab83Test,一个名为CircleList,一个名为Circle。 (格式化很奇怪,我无法修复它,所以道歉!)

Lab83Test:

public class Lab83Test {

    public static void main(String[] args) {
        makeNewCircle();
    }
    public static void makeNewCircle() {
        CircleList newList = new CircleList();
        Circle newCircle = new Circle();
        newList.addCircle(newCircle);
        newCircle.makeVisible();
        newList.printDetails();
    }
}

CircleList:

import java.util.Vector;

public class CircleList {
    private Vector circleVector;

    public CircleList() {
        circleVector = new Vector();
    }
    public void addCircle(Circle circleName) {
            circleVector.add(circleName);
            printDetails();
    }
    public void addCircleToPlace(Circle circleName, int pos) {
        circleVector.add(pos, circleName);
        printDetails();
    }
    public void removeCircleFromPos(int pos) {
        circleVector.remove(pos);
        printDetails();
    }
    public void removeAllCircles(int pos) {
        circleVector.clear();
        printDetails();
    }
    public void printDetails() {

    }
}

圈子类并不重要,它有很多方法可以移动圆圈和东西。最重要的是它必须恢复其状态。

1 个答案:

答案 0 :(得分:1)

如果你只想迭代列表中的所有Circel并打印他们的名字,你可以这样做:

public void printDetails() {
  for (Circle c: circleVector) {
    System.out.println(String.format("%s: center=(%.1f/%.1f) radius=%.1f", c.getName(), c.getCenterX(), c.getCenterY(), c.getRadius()));
  }
}

我不知道你的Circle类看起来如此,所以我只假设了一些方法名称。

如果您想按名称查找特定圈子:

for (Circle c: circleVector) {
  if (c.getName().equals(nameToFind)) return c;
}

或者您可以使用Map<String, Circle>代替您的向量,然后执行return circleMap.get(name);。您的addCircle()将如下所示:

public void addCircle(Circle circle) {
  circleMap.add(circle.getName(), circle);
  printDetails();
}

Edit1:关于您的评论:您的矢量没有定义的类型。改变这个:

...
public class CircleList {
  private Vector<Circle> circleVector;

  public CircleList() {
    circleVector = new Vector<Circle>();
  }
  ...