2013-09-24 4 views
0

У меня есть этот массивцикла, чтобы проверить массив строк для элемента

public static ArrayList<String> inventory = new ArrayList<String>(); 

и имеют игрок предметы, хранящиеся внутри него.

Я хочу добавить функцию в класс магазина, которая будет продавать все, кроме кирки, как я могу создать цикл, чтобы проверить, есть ли что-то в массиве, отличном от «pickaxe», и если его нужно удалить?

Для удаления У меня есть пустота

public void removeAllInventory() { 

    inventory.clear(); 

} 

или

public void removeInventory(String item) { 

    inventory.remove(item); 

} 

Могу ли я просто редактировать removeAllInventory игнорировать кирку и сделать новую пустоту под названием removeAllShop или что-то? Если да, то что будет в этой пустоте?

Это где мне нужно положить его в:

else if (input.input.equalsIgnoreCase("all")) { 


} 

ответ

1

Вы не должны редактировать removeAllInventory(), чтобы удалить все, кроме кирки. Его название больше не имеет смысла, и кажется разумной рутиной, чтобы держаться.

Но вы можете добавить новый метод, removeAllInventoryExcept(String item), который удаляет все, кроме данного предмета.

Надеюсь, это поможет.

EDIT: В попытке усилить этот ответ, я хотел бы также предложить «из коробки» решение:

public void removeAllInventoryExcept(String item) { 
    ArrayList<String> newInv = new ArrayList<String>(); 
    newInv.add(item); 
    inventory = newInv; 
} 

Это позволяет избежать дорогостоящих итераций и сравнения строк.

+2

Неужели это не стоит комментарий? Это не решает вопрос. –

+0

Что бы я добавил в новый метод, чтобы он действительно работал? – user2809361

+0

Я согласен с тем, что сохранение вашего кода в качестве самостоятельного документирования - это хороший способ сохранить ваше здравомыслие. Изменение функциональности removeAllInventory начинается с того, что вы делаете свой код ... намного меньше, чем понятно третьему лицу. – user2366842

2

Петля по списку, проверьте, если каждый элемент равен кирку, и удалите его, если это не так.

Iterator<String> i = inventory.iterator(); 
while (i.hasNext()) { 
    if (i.next().equalsIgnoreCase("pickaxe")) 
    i.remove() 
} 
+0

Обратите внимание, что использование цикла for без итератора приведет к ошибке java.util.ConcurrentModificationException. –

0

Я предполагаю, что все предметы в инвентаре является предком класса элемента, а не только строкой.

Вы можете пройти через ArrayList, получить имена каждого элемента и сравнить его с именем кирки.

или

Вы могли цикл через ArrayList и проверки, если каждый элемент является instanceof кирка, и если это не так, удалите его из ArrayList

редактировать * Кажется, вы указан ArrayList является типа String, поэтому игнорируйте второй вариант

0
for (String item : inventory) { 
    if (!"pixckaxe".equalsIgnoreCase(item)) { 
     inventory.remove(item); 
    } 
} 
+0

Этот код приведет к ошибке java.util.ConcurrentModificationException. Не используй! –

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