0

配列「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つの惑星を正常に追加すると、初期化時にサイズに指定した値が常に返されます)。私は何を間違っていますか?

注: 配列「planeta」を NP で初期化します。つまり、No Planet を意味します。新しい惑星を追加すると、配列「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」を初期化する方法: private Planet noPlanet=new Planet("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;

}
4

3 に答える 3

0

null特別な値オブジェクトの代わりに sを使用することをお勧めします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 intoおよびコマンドを使用して、 Run > Step over1 行ずつ移動します。

于 2013-04-12T23:16:17.103 に答える
0

Planet[] planeta = new Planet[12];配列の長さのように配列を宣言した場合、常に12. 配列には、初期化されていない値が既に取り込まれています。この場合null

ArrayList<Planet> planeta = new ArrayList<Planet>();代わりに使用してください。で新しい惑星を追加しplaneta.add( new Planet() );、 でサイズを返すことができplaneta.size()ます。

静的配列の使用に固執する必要があるnull場合は、ループ内でインデックスに値があるかどうかをテストforし、見つかったときにサイズを小さくする必要があります。

于 2013-04-12T22:29:44.453 に答える
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;



}
于 2013-04-13T15:03:12.757 に答える