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

我有一个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*/每颗行星的名字是“冥王星”。为什么?我该如何解决这个问题?


小怪兽爱吃肉
浏览 134回答 2
2回答

陪伴而非守候

您不断覆盖同一个planet对象。相反,您应该为循环中的每次迭代创建一个新对象:for (int idx = 0; idx < 9; ++idx) {&nbsp; &nbsp; Shape planet = new Circle(); // Inside the loop!&nbsp; &nbsp; switch(idx) {

紫衣仙女

现在,您只需要创建Circle.然后,您将遍历您的行星索引并将该索引中的字段设置为不同的值。这就是为什么只有循环的最后一次迭代看起来像是被保存了。要解决您的问题,您需要为Circle循环的每次迭代创建一个新实例。换句话说,切换这两行的顺序:Shape planet = new Circle();for(int idx = 0; idx<9; ++idx){
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java