2016-06-13 3 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

Создайте модульные тесты для своих классов, особенно если вы собираетесь построить «большую и сложную программу». Это гарантирует вам, что написанный код будет работать позже, и если вы измените код, сбой модульных тестов должен указывать на проблему. Единичный тест также дает вам возможность проверить, работает ли ваш метод, как ожидалось.

Как и в других комментариях, рассмотрите возможность использования интерфейса List вместо массива, если у вас нет определенного требования (я не могу себе представить). И определенно, если поля public static в вашем классе выглядят подозрительными.

EDIT

Просто, чтобы показать, как код может выглядеть и как вызывать методы основного метода.

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

что я должен сделать, чтобы создать экземпляр класса - сделать «публичный интерфейс»? – 112

Смежные вопросы