java - 按名称删除数组并关闭任何空间隙的代码

标签 java arrays class boolean

我在尝试在 Planet 类中提出 boolean 方法来按名称删除数组并移动值以消除任何空间隙时遇到问题。有人可以帮忙吗?以下是我的月球和行星类(class)...

月球级:-

public class Moon
{
  private float angle=0.01;
  // add class member variables here
  private String name;
  private float radius;
  private float distance;
  private float speed;
  private int orbitalPeriod;


  // add constructor here
  public Moon(String name, float radius, float distance, float speed, int orbitalPeriod)
  {
    this.name=name;
    this.radius=radius;
    this.distance=distance;
    this.speed=speed;
    this.orbitalPeriod=orbitalPeriod;
  }


  // add other methods here
  public String getName()
  {
    return name;
  }

  public void setName(String name)
  {
    this.name = name;
  }

  public float getRadius()
  {
    return radius;
  }

  public float getDistance()
  {
    return distance;
  }

  public float getSpeed()
  {
    return speed;
  }

  public float getAngle()
  {
    return angle;
  }

  public int getOrbitalPeriod()
  {
    return orbitalPeriod;
  }

  public void setOrbitalPeriod(int orbitalPeriod)
  {
    this.orbitalPeriod = orbitalPeriod;
  }

  public String toString()
  {
    return "Moon:"+name+" - (orbit= "+orbitalPeriod+")";
  }

  // This will display the moon when other code is completed.
  public void display()
  {
    angle=angle+(0.01*speed);
    pushMatrix();
    rotate(angle);
    translate(distance, 0);
    fill(149, 149, 149);
    ellipse(0, 0, radius*2, radius*2);
    popMatrix();
  }
}

行星类别:-

public class Planet
{
  private float angle=0.01;
  // add class member variables here
  private float radius, distance, speed;
  private String name;
  private Moon [] moons = new Moon [5];
  private int numOfMoons = 0;


  // add constructor here
  public Planet(String name, float radius, float distance, float speed)
  {
    this.name=name;
    this.radius=radius;
    this.distance=distance;
    this.speed=speed;
  }

  // add other methods here
  public String getName()
  {
    return name;
  }

  public float getRadius()
  {
    return radius;
  }

  public void setRadius(float radius)
  {
    this.radius = radius;
  }

  public float getDistance()
  {
    return distance;
  }

  public float getSpeed()
  {
    return speed;
  }

  public Moon[] getMoons()
  {
    return moons;
  }

  public String toString()
  {
    return "Planet:"+name+" (r= "+radius+ "d= "+distance+") has "+moons.length+" moon(s)";
  }

public void printMoons()
{
  for (Moon moon : getMoons())
  println(moon);
}

public void addMoon(Moon moon)
{
  moons[numOfMoons] = moon;
  ++numOfMoons;
}

public boolean removeMoonByName(String moonName)
{
  for (Moon moon : getMoons())
    if(moon!=null)
      moon.removeMoonByName();

}


// This will display the moon when other code is completed.  You don't need to understand this code.
public void display()
{
angle=angle+(0.01*speed);
pushMatrix();
rotate(angle);
translate(distance, 0);
fill(255, 255, 255);
ellipse(0, 0, radius*2, radius*2);   

for (Moon moon : getMoons())
  if(moon!=null)
    moon.display();

popMatrix();
 }
}

最佳答案

您的代码看起来卫星数量可能经常变化,因此数组可能不是您想要执行的操作的最佳选择。

考虑使用大小灵活的 ArrayList。 这是您想要执行的操作:

private ArrayList<Moon> moons = new ArrayList<>();

public void addMoon(Moon moon){
  moons.add(moon);
}

public boolean removeMoonByName(String moonName){
  Moon remove;
  for(Moon m : moons){
    if(m.getName().equals(moonName)){
      remove = m;
    }
  }
  if(remove != null) return moons.remove(remove);
  return false;
} 

请注意,如果您按名称删除月亮,情况会更加复杂,因为您必须遍历列表,获取所需的月亮,然后将其删除。

关于java - 按名称删除数组并关闭任何空间隙的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40042947/

相关文章:

java - 如何使用自定义映射器映射字段并将字段名称映射保存在 MapperFacade 或 MapperFactory 中?

java - 限制 JTable + 下一个/上一个按钮中显示的行

php - 在 session php 数组中显示下一条记录

javascript - 使用 JavaScript 在多维数组 B 中查找数组 A

ruby-on-rails - 将类动态解析为全局范围

PHP 类具有来自 Traits 的冲突构造函数定义

java.lang.ClassCastException : oracle. sql.CLOB 无法转换为 oracle.sql.CLOB

java - 找不到符号(计算器)

javascript - 按第二个数组的顺序排序

python - 在 Python 类构造函数中只允许一对参数中的一个的最佳方法是什么?