Как создать переменное число arrayLists с переменным количеством элементов в списке? - PullRequest
1 голос
/ 14 января 2012

Я пытаюсь сгенерировать переменное число arrayLists с переменным количеством элементов в списке.Это означает, что я не могу использовать массив вместо arrayList.

При создании JLabel в массиве вы используете цикл for и говорите:

 label[i]=new JLabel();

Возможно ли это дляa arrayList?

Я не могу выложить свой код, потому что он слишком длинный, но я дам вам общую идею: в txt есть несколько объектов, в данном случае, войска: longbowman, человек воружия, рыцарь ... Каждый 1 имеет одинаковую статистику (ArrayLists), но имеют разные значения для каждого.У меня так, что когда bufferedReader заканчивает с отрядом, он отправляет всех массивов в другой класс и продолжает читать и перезаписывать статистику старых войск (теперь они хранятся в другом классе).проблема в том, как другой класс может различать статистику?Это было бы легко, если бы количество типов войск было постоянным, но это не так.Так как я могу это сделать?

Редактировать: вот немного исходного кода:

while ((text = reader.readLine()) != null) {
            StringTokenizer troops = new StringTokenizer(text, "=");
            String list = troops.nextToken();
            String value = troops.nextToken();

            else if (list.equals("Done")) {
                troop trooper=new troop();
                trooper.troopLoaded(kingdom,lord,troop,troopAmount,weapon,animal);

}

/////

класс войск:

   public void troopLoaded(ArrayList<String> kingdom,ArrayList<String> lord,ArrayList<String> troop,ArrayList<String>,troopAmount,ArrayList<String> weapon,ArrayList<String> animal) {

    System.out.println(kingdom);
    System.out.println(lord);
    System.out.println(troop);
    System.out.println(troopAmount);
    System.out.println(weapon);
    System.out.println(animal);

}

как дать классу войск массива без переписывания их в классе войск?

Ответы [ 4 ]

2 голосов
/ 14 января 2012
import java.util.ArrayList;
import java.util.List;

class Item {
    private name;

    public String getName() {
        return name;
    }

    private void setName(String name) {
        this.name = name;
    }


public class ItemManager {

    public static List<ArrayList<Item>> megaList;
    public static void main(String args) {

        megaList = new ArrayList<ArrayList<Item>>();

        ArrayList<Item> someItems = new ArrayList<Item>();
        someItems.add(new Item());
        someItems.add(new Item());

        megaList.add(someItems);

        for(ArrayList<Item> list : megaList ) {
            for (Item item : list) {
                String nameOfItem = item.getName();
            }
        }
    }

Затем вы можете выполнить итерацию внутри megaList и рекурсивно выполнить итерацию внутри someItems.

1 голос
/ 14 января 2012

Если я правильно понимаю ваш вопрос, вы можете использовать:

ArrayList<ArrayList<Object>>
0 голосов
/ 17 января 2012

Я только что использовал массив двухмерного массива [] []

0 голосов
/ 14 января 2012

IIUC, вы хотите, чтобы все эти параметры не передавались методу troopLoaded()?

Вы можете рассмотреть возможность использования Map из ArrayList s:

Map<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();

map.put("kingdom", new ArrayList<String());
...

map.put("animal", new ArrayList<String());

затем позвонив:

trooper.troopLoaded(map);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...