为了账号安全,请及时绑定邮箱和手机立即绑定

如何将具有不同值的相同对象生成到 ArrayList 中?

如何将具有不同值的相同对象生成到 ArrayList 中?

小怪兽爱吃肉 2021-10-20 14:51:28
我有一个ArrayList,我想将太阳系中的一些行星保存为这个形状ArrayList,但最后,只有最后一个对象参数被保存,因为总共有很多对象。这主要是:ArrayList<Shape> shapes = new ArrayList<Shape>();void setup() {  size(1600, 800);  generateSolarSystem();}void draw() {  update();  //background(255);  int begin_x = 100;  int begin_y = 100;  int distance = 1;  for (Shape s : shapes) {   pushMatrix();     translate(begin_x+distance, begin_y);     scale(1.1, 1.1);     s.Draw();      text(s.name, begin_x+distance, begin_y+10);     distance += 100;     System.out.println("name: " + s.name); /*3*/    popMatrix();  } }void generateSolarSystem() {  /**/  int d = 10;  /**/  Shape planet = new Circle();;  for(int idx = 0; idx<9; ++idx){    switch(idx) {      case 0:         //Mercury        planet.planet_color_r = 128;        planet.planet_color_g = 128;        planet.planet_color_b = 128;        planet.name = "Mercury";        planet.mass = "33011 x 10^23";        break;      case 1:         // Venus        planet.planet_color_r = 255;        planet.planet_color_g = 255;        planet.planet_color_b = 0;        planet.name = "Venus";        planet.mass = "4.8675 × 10^24 kg";        break;      case 2:         // Earth        planet.planet_color_r = 0;        planet.planet_color_g = 0;        planet.planet_color_b = 255;        planet.name = "Earth";        planet.mass = "4.8675 × 10^24 kg";        break;      case 3:         // Mars        planet.planet_color_r = 255;        planet.planet_color_g = 128;        planet.planet_color_b = 0;        planet.name = "Mars";        planet.mass = "4.8675 × 10^24 kg";        break;      case 4:         // Jupiter        planet.planet_color_r = 150;        planet.planet_color_g = 75;        planet.planet_color_b = 0;        planet.name = "Jupiter";        planet.mass = "4.8675 × 10^24 kg";        break;在/*1*/行星的名字似乎不错,但/*2*/在/*3*/每颗行星的名字是“冥王星”。为什么?我该如何解决这个问题?
查看完整描述

2 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

您不断覆盖同一个planet对象。相反,您应该为循环中的每次迭代创建一个新对象:


for (int idx = 0; idx < 9; ++idx) {

    Shape planet = new Circle(); // Inside the loop!

    switch(idx) {


查看完整回答
反对 回复 2021-10-20
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

现在,您只需要创建Circle.


然后,您将遍历您的行星索引并将该索引中的字段设置为不同的值。这就是为什么只有循环的最后一次迭代看起来像是被保存了。


要解决您的问题,您需要为Circle循环的每次迭代创建一个新实例。换句话说,切换这两行的顺序:


Shape planet = new Circle();

for(int idx = 0; idx<9; ++idx){


查看完整回答
反对 回复 2021-10-20
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信