0

コードが機能しない理由について誰かが洞察を提供できますか?

[編集: 修正されたコードと新しいエラー]

出力によると、スレッド「メイン」でエラー Exception がjava.lang.NullPointerException 発生し、World.addCountry()コード (8 行目) でエラーが発生し、コードaddWorldplaces()(5 行目) でエラーが発生します。

worldクラスをインスタンス化しないことに関係していると感じていますか?それは可能でしょうか?

public class World{

private Country[] countries;
private int numCountries=0;

public boolean addCountry(Country newCountry){
    if(!(newCountry==null)){
        countries[numCountries]=newCountry;

        numCountries++;
        return true;
    }
    else
        return false;
       }
}

public static void addWorldplaces(World pWorld){
         Country usa=new Country("USA", 1);
        pWorld.addCountry(usa);
}
4

3 に答える 3

2

配列は実際には Java のオブジェクトです。Countries配列を使用する前に、配列を割り当てる必要があります。通常、コンストラクターでこれを行います。

public class World
{
  private Country[] countries;
  private int numCountries;

  public World()
  {
    this.countries = new Country[16];       // allocate the array
    this.numCountries = 0;
  }

  ...
}

配列のサイズを適切に設定する必要があります。ArrayListまたは、必要に応じて自動的にサイズが大きくなる を見ることもできます。

于 2012-05-16T01:22:08.167 に答える
2

2 つの可能性があります。

  1. オブジェクトをインスタンス化しませんでした(最初にインスタンス化するWorld場所がわかりませんでした)pWorld
  2. あなたの配列はCountryインスタンス化されませんでした。このようにしなければなりませんprivate Country[] countries = new Country[10]

注: 例外のスタック トレースを投稿してください。

于 2012-05-16T01:29:08.810 に答える
1

Greg Kopff の言うとおりです。何かを入れる前に配列を初期化する必要があります。

あなたの場合、配列のサイズは決定されていません。ArrayListの方が優れています。したがって、配列や国番号を自分で拡張する必要はありません。

public class World {

  private ArrayList<Country> countries = new ArrayList<Country>();

  public boolean addCountry(Country country) {
      if (country != null) {
          countries.add(country);
          return true;
      } else {
          return false;
      }
  }

  public int getCountryNumber() {
      return countries.size();
  }
  ...
}
于 2012-05-16T02:00:32.073 に答える