2016-04-27 4 views
0

Скажем, у меня есть класс с именем items с этим кодом:Как отобразить число определенных элементов в массиве?

import java.util.ArrayList; 

public class items { 
    private ArrayList<Item> itemlistweapons = new ArrayList<Item>(); 
    private ArrayList<Item> itemlistapparel = new ArrayList<Item>(); 
    private ArrayList<Item> itemlistaid = new ArrayList<Item>(); 
    private ArrayList<Item> itemlistmisc = new ArrayList<Item>(); 

    public void additem(String name, String type){ 
     if("Weapon".equals(type)){ 
      itemlistweapons.add(new Item(name, type)); 
     } 
     else if ("Apparel".equals(type)){ 
      itemlistapparel.add(new Item(name, type)); 
     } 
     else if ("Aid".equals(type)){ 
      itemlistaid.add(new Item(name, type)); 
     } 
     else if ("Misc.".equals(type)){ 
      itemlistmisc.add(new Item(name, type)); 
     } 
    } 

    public void dropitem(String name){ 
     for(int i = 0; i < itemlistweapons.size(); i++){ 
      if(itemlistweapons.get(i).getname().equals(name)){ 
       itemlistweapons.remove(i); 
      } 
     } 
     for(int i = 0; i < itemlistapparel.size(); i++){ 
      if(itemlistapparel.get(i).getname().equals(name)){ 
       itemlistapparel.remove(i); 
      } 
     } 
     for(int i = 0; i < itemlistaid.size(); i++){ 
      if(itemlistaid.get(i).getname().equals(name)){ 
       itemlistaid.remove(i); 
      } 
     } 
     for(int i = 0; i < itemlistmisc.size(); i++){ 
      if(itemlistmisc.get(i).getname().equals(name)){ 
       itemlistmisc.remove(i); 
      } 
     } 
     } 


    @Override 
    public String toString(){ 
     String items = ""; 
     if (itemlistweapons.size() > 0){ 
      items += "Weapons\n"; 
     for (Item itemlist1 : itemlistweapons) { 
      items += itemlist1 + "\n"; 
     } 
     } 

     if (itemlistapparel.size() > 0){ 
      items += "Apparel\n"; 
     for (Item itemlist2 : itemlistapparel) { 
      items += itemlist2 + "\n"; 
     } 
     } 
     if (itemlistaid.size() > 0){ 
      items += "Aid\n"; 
     for (Item itemlist3 : itemlistaid) { 
      items += itemlist3 + "\n"; 
     } 
     } 
     if (itemlistmisc.size() > 0){ 
      items += "Misc.\n"; 
     for (Item itemlist4 : itemlistmisc) { 
      items += itemlist4 + "\n"; 
     } 
     } 
     return items; 
    } 

} 

Я хочу, чтобы иметь возможность отображать количество конкретных пунктов в этом списке.

Например, для моей игры, основанной на тексте, игрок добавляет 25 золотых предметов в свой инвентарь. Я не хочу, чтобы он показывал слово «золото» 25 раз в своем инвентаре, а вместо этого «Золото (25)». Как мне это сделать?

+0

И проблема в этом? – shmosel

+1

Я вижу два способа сделать это. Один из способов заключается в том, чтобы включить метод, который подсчитывает, сколько раз данный элемент встречается в каждом списке, а затем отображает каждое имя элемента один раз рядом с его количеством. Другой способ - изменить класс Item для включения количества, а также имени и типа. –

ответ

0

Я довольно смущен ваш вопрос ... Но здесь не идет ничего ...

Метод size() должен дать вам то, что вы ищете. Это часть интерфейса Collection, который реализует ArrayList.

От JavaDoc:

INT размер()

Возвращает число элементов в этом списке. Если этот список содержит больше элементов Integer.MAX_VALUE, возвращается Integer.MAX_VALUE.

Это, как говорится, в следующем коде показано, как можно использовать этот метод на практике:

List<GoldCoin> gold = new ArrayList<GoldCoin>(); 
// Code ... 
System.out.println("Gold (" + gold.size() + ")"); 

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

0

Если вы хотите, чтобы количество предметов в арраиле, например, количество оружия у вас есть, вы можете просто использовать itemlistweapons.size(), если вы хотите подсчитать какое-то определенное оружие, например, сколько мечей у вас есть, вы можете увеличить значение переменной, если текущий оружие - это меч, в то время как петля через itemlistweapons. Для чего-то вроде золота вы не хотите использовать arraylist, так как переменной достаточно, что вы можете увеличить каждый раз, когда получаете золото.

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