如何计算循环java的迭代次数

时间:2013-04-12 22:18:53

标签: java if-statement for-loop

我必须实现这个方法,它给出了数组“planeta”中的行星数。

public int size() {

    int size=planeta.length-1;

    for (int k=planeta.length-1;k>0;k--){
        if (planeta[k].name().equals(noPlanet))
        size--;
    }
    return size;

}

它返回“planeta.length-1”的值而不是它应该的值(例如,我成功添加了2个行星,它总是返回我在初始化时给予size的值)。我做错了什么?

注意:我用NP初始化阵列“planeta”,这意味着没有行星。当我添加新行星时,它们会从数组“planeta”中的0开始进入第一个自由位置。请帮忙!!!!!谢谢=)

addPlanet方法:     public void addPlanet(String planetName,BigInt x,BigInt y,BigInt z){

    if(!planetExists(planetName) && !complete()){

        SpacePoint newSP= new SpacePoint(x,y,z);
        Planet newPlanet= new Planet(planetName,newSP);

        s=this.size();
        planeta[s]=newPlanet;

    }

}

我如何初始化数组“planeta”: 私人星球noPlanet =新星球(“NP”);

/** 
 * Creates a new Galaxy with no associated Planets and a given name
 * @param name the name of the Galaxy
 */
public Galaxy(String name) {


    this.name=name;


    //if the galaxy has no planets in it,it's array if filled with planet NP-No Planet
    for (int i=0;i<planeta.length;i++)
        planeta[i]=noPlanet;

}

3 个答案:

答案 0 :(得分:0)

如果您将数组声明为Planet[] planeta = new Planet[12];,则数组的长度始终为12。该数组已填充未初始化的值。在这种情况下null

请改用ArrayList<Planet> planeta = new ArrayList<Planet>();。 您可以使用planeta.add( new Planet() );添加新行星,并使用planeta.size()返回大小。

如果必须坚持使用静态数组,则应测试索引在null循环中是否具有for值,并在找到时减小大小。

答案 1 :(得分:0)

最好使用null代替特殊值对象,即new Planet("NP")。 我猜这是你要找的东西:

public class Galaxy {
  // Empty array of size = 10, i.e. { null, null, .. , null }
  private Planet[] planeta = new Planet[10];

  public Galaxy(String name) {
    this.name = name;
  }

  public int size() {
    int size = 0;

    for (int k = 0; k < planeta.length; k++) {
      // Is there a planet or is it empty?
      if (planeta[k] != null) {
        // There's a planet.
        size++;
      }
    }
    return size;
  }

  public boolean planetExists(String planetName) {
    // Go through the array looking for that planet...
    for (int k = 0; k < this.size(); k++) {
  // NOTICE that we're going only through the non-empty array elements,
      // but we'll check for null either way.
      if (planeta[k] != null && planeta[k].name().equals(planetName)) {
        // Found it.
        return true;
      }
    }

    // Didn't find the planet.
    return false;
  }

  public void addPlanet(String planetName, BigInt x, BigInt y, BigInt z) {
    if (!planetExists(planetName) && !complete()) {
      SpacePoint newSP = new SpacePoint(x, y, z);
      Planet newPlanet = new Planet(planetName, newSP);

      int position = this.size();
      planeta[position] = newPlanet;
    }
  }
}

对于调试,大多数开发环境(IDE)都在Run > Debug命令中有Run > Run命令。首先,您需要在所选行上设置一个断点,通常为Run > Toggle Breakpoint。使用Run > Step intoRun > Step over命令逐行进行。

答案 2 :(得分:0)

这个有效! (至少在我的情况下)我会告诉你这些变化:

public int size() {

    int size = planeta.length;

    for (int k=planeta.length-1; k>=0; k--) {
          // Is there a planet or is it empty?
          if (planeta[k].equals(noPlanet)) {
            // There's no Planet
            size--;

          }
        }
        return size;
}

方法planetExists:

public boolean planetExists(String planetName) {

    for (int i=0;i<planeta.length;i++)
        if (planeta[i].name().equals(planetName))
            return true;

    return false;



}