множество индексированных объектов в ArrayList - возможно ли это? - PullRequest
0 голосов
/ 07 июня 2018

Можно ли создать набор индексированных объектов в ArrayList?

Я хочу создать массив объектов - класс портала - и проиндексировать их в массиве, размер которого будет определяться пользователем.

   import java.util.ArrayList;
    import java.util.Scanner;

    public class GameFunctions
    {
        Scanner sc = new Scanner(System.in);
        private int portalsQty;
        private String[] portalNamesDB = {"name1", "name2", "name3", "name4", "name5"};
        ArrayList<Portal> portals = new ArrayList<>();

        void setPortalsQty(int portalsQty)
        {
            this.portalsQty = portalsQty;
        }

        int getPortalsQty(int portalsQty)
        {
            return portalsQty;
        }
        private void createPortals()
        {
            System.out.println("type the

 amount of portals");
        portalsQty = sc.nextInt();
        System.out.println("number of portals: " + portals.size());
        for (int i = 0;  i < portalsQty; i++)
        {
            portals.add(i,p[i]);   // CANNOT HAVE VALUES INDEXED LIKE p[i] IN ARRAYLIST
        }


    }

    private void namePortals()
    {
        int randomNo = (int)(Math.random()*portalsQty);
        for (int i = 0;  i < portalsQty; i++)
        {
            System.out.println("Random: " + randomNo);
            portals[i].setPortalName(portalNamesDB[randomNo]);
        }
    }


    public void launchGame()
    {
        createPortals();
        namePortals();


    }

}

Определение размера массива пользователем делает невозможным использование таблиц, так как мы встречаем исключение NullPointerException.Есть ли другое решение для динамического размера таблицы и индексации элементов?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018
    import java.util.HashMap;   


    HashMap<Integer, portal>portals = new HashMap<>();

    System.out.println("number of portals: " + portals.size());

    for (int i = 0;  i < portalsQty; i++)
    {
        int randomNo = (int)(Math.random()*portalsQty);

        portals.put(portalNamesDB[randomNo], i);   
    }

Mureinik и chrylis правы, карта или HashMap, вероятно, сработали бы здесь лучше всего.

Я добавил пример того, как вы могли бы это реализовать.Таким образом, вы даете каждому порталу имя и количественное значение в одном цикле for.Имя портала - это ключ, а количество - это значение в моем примере.

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

0 голосов
/ 07 июня 2018

Вы можете эмулировать это поведение с картой, которая отображается из индекса на объект:

Map<Integer, Portal> indexes = new HashMap<>();
...