2016-06-13 13 views
0

Playerというオブジェクトを含む大きなプログラムを書いています。次のようにプレイヤーの定義は次のとおりです。Java - オブジェクト配列からオブジェクトを削除する

public class Player 
{ 
    public static String name; 
    public static Item inventory[] = new Item[10]; 
    public static int items; 

    /* ... */ 

    public void addItem(String itemName, int itemType) 
    { 
      if ((items + 1) <= 10) { 
        inventory[items] = new Item(itemName, itemType); 
        items++; 
      } 
    } 

    public void removeItem(int x) 
    { 
      for (int i = x; i < items; i++) 
        inventory[i] = inventory[i+1]; 
    } 
} 

それはそれを後で追加するよりもはるかに簡単ですので、私は今、在庫処理を追加していますが、inventoryはかなり後に開発中まで使用する予定がありません。 removeItemが動作するかどうかはわかりません。私はこれを得るためにstrstripと書かれた関数を修正しました... removeItemは動作しますか?そうでない場合、なぜですか?

+6

リストを削除する場合は、リストなどが適しています。通常、ArrayList。それにもかかわらず、 'removeItem'は動作しません。それはクラッシュしますが、テストすればそれを知ることができます。また、 'static 'とは何かを知りたいかもしれません。 – njzk2

+1

* removeItemが動作するかどうかはわかりません*:確かにそうです。アイテムを追加した後、アイテムを削除して、含まれるべきものが含まれているインベントリを確認します。つまり、あなたはArrayListを改革しています。 –

+0

デバッグはあなたの友人です! –

答えて

1

クラスのユニットテストを作成します。特に、「大きくて複雑なプログラム」を作成する場合は、これにより、書かれたコードが後で動作することが保証されます。コードを変更すると、単体テストの失敗によって問題が示されるはずです。ユニットテストでは、メソッドが期待どおりに機能するかどうかをチェックすることもできます。

他のコメントと同様に、特定の要件がある場合を除いて、配列の代わりにリストインターフェイスを使用することを検討します(私は想像できません)。そして、間違いなく、あなたのクラスのフィールドがpublic staticであることは疑わしいと思われます。

EDIT

ただ、コードは次のようになり、どのようにmainメソッドからメソッドを呼び出すことができる方法を示すために。

public class Player { 

    private String name; 
    private List<Item> inventory; 
    private int items; 

    public Player() { 
     this.inventory = new ArrayList(); 
    } 

    public void addItem(String itemName, int itemType) { 
     this.inventory.add(new Item(itemName, itemType)); 
    } 

    public void removeItem(int x) { 
     Item itemToRemove = this.inventory.get(x); 
     if (itemToRemove != null) { 
      this.inventory.remove(itemToRemove); 
     } 
    } 

    public static void main(String[] args) { 
     // create a new instance 
     Player player = new Player(); 
     // call a method on the instance 
     player.addItem("bla", 0); 
    } 
} 
+0

私はすべて 'static'を' public static void main'によってアクセスできるように使用します。それ以外の場合、私はエラーが発生します - '静的でないコンテキストから静的にアクセスできません'。 – 112

+0

もちろん、それは文句を言うでしょう。主な方法は静的で、クラスの非静的メソッドを使用するためには、クラスのインスタンスを最初に作成する必要があります。静的について確信が持てない場合は、この投稿をチェックしてください。http://stackoverflow.com/questions/3903537/i-want-to-know-the-difference-between-static-method-and-non-static-method –

+0

クラスのインスタンスを作成するにはどうすればよいですか? 'public interface'を作成しますか? – 112

関連する問題