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



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

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

我有 3 个类,主要的类称为 Lab83Test,矢量类称为 CircleList,Circle 类称为 Circle。(格式变得很奇怪,我无法修复它,所以很抱歉!

实验室83测试:

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

圈子列表:

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() {
    }
}

类不是太重要,它有很多移动圆的方法。最主要的是它必须返回其状态。

如果您只想遍历列表中的所有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();
}

编辑1:关于您的评论:您的向量没有定义的类型。更改此设置:

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

最新更新