Случайный выбор из случайного списка строк (JAVA) - PullRequest
0 голосов
/ 03 августа 2020

У меня очень минимальный опыт программирования, и я пытаюсь создать случайный (i sh) генератор классов для моих приятелей и меня в Warzone ради развлечения. Это очень простой генератор c, но у меня возникли проблемы с тем, чтобы понять, как получить желаемые выходные данные. Это превратилось в более крупный проект, чем я ожидал, поэтому я воспользуюсь любой помощью, которую смогу получить!

Для всех, кто не играл в игру, вы можете выбрать максимум 9 различных классов вложений ( т. е. глушители, стволы, оптика, приклады и т. д. c), но у вас может быть экипировано не более 5, что означает, что некоторые классы навесного оборудования не будут использоваться. Я не добавил все категории вложений или специальные вложения, которые могут быть, поскольку я пытаюсь сначала разработать основы.

Я бы хотел, чтобы окончательный результат был примерно таким:

Primary Gun: M4A1
Primary Grip: Commando
Primary Laser: None
Primary Stock: No Stock Attachment
Primary Mag: 50
Primary Rear Grip: Stippled
Primary Barrel: Big Barrel 

На данный момент он просто выводит что-то вроде

Primary Gun: M4A1 Primary Attachments: Commando None No Stock Attachment 50 Stippled None

Это то, что у меня есть до сих пор (извините, если код выглядит уродливо, лол)

import java.util.concurrent.ThreadLocalRandom;


public class RandomClass {


    public static void main(String[] args) {



        System.out.println("Primary: " + randomPrimaryGun());
        System.out.println("Attachments: " + primaryAttachments());
        System.out.println("Secondary: " + randomSecondaryGun());
       
    }


    public static String randomPrimaryGun() {

        String[] primaryGuns = {"M4A1", "Kilo", "Grau", "Bruen", "FAL", "M13"};
        int randIdx = ThreadLocalRandom.current().nextInt(primaryGuns.length);

        String randPrimary = primaryGuns[randIdx];
        return randPrimary;
    }


    public static String randomSecondaryGun() {

        String[] secondaryGuns = {"MP5", "P90", "AUG", "Uzi", "MP7"};
        int randIdx = ThreadLocalRandom.current().nextInt(secondaryGuns.length);

        String randSecondary = secondaryGuns[randIdx];
        return randSecondary;
    }


    public static String primaryAttachments() {

        String[] primaryGrip = {"Merc ", "Ranger ", "Commando ", "None "};
        String[] primaryLaser = {"Tac ", "5mw ", "None "};
        String[] primaryStock = {"No Stock Attachment ", "No Stock ", "Fast stock "};
        String[] primaryMag = {"50 ", "60 "};
        String[] primaryRearGrip = {"Stippled ", "None "};
        String[] primaryBarrel = {"Big Barrel", "Short Barrel"};

        int randIdx0 = ThreadLocalRandom.current().nextInt(primaryGrip.length);
        int randIdx1 = ThreadLocalRandom.current().nextInt(primaryLaser.length);
        int randIdx2 = ThreadLocalRandom.current().nextInt(primaryStock.length);
        int randIdx3 = ThreadLocalRandom.current().nextInt(primaryMag.length);
        int randIdx4 = ThreadLocalRandom.current().nextInt(primaryRearGrip.length);
        int randIdx5 = ThreadLocalRandom.current().nextInt(primaryBarrel.length);

        String grip = primaryGrip[randIdx0];
        String laser = primaryLaser[randIdx1];
        String stock = primaryStock[randIdx2];
        String mag = primaryMag[randIdx3];
        String rearGrip = primaryRearGrip[randIdx4];
        String barell = primaryBarrel[randIdx5];

    
    }
}

Я знаю, что нужны некоторые операторы if / else и, возможно, несколько циклов, но я понятия не имею, как реализовать это со случайным выбором из списка. Если бы кто-нибудь мог хотя бы помочь мне начать работу, я был бы очень признателен! Когда я узнаю метод basi c, я могу go оттуда и добавить все, что мне нужно! сделать первичные вложения, но по сути это будет тот же код, только с некоторыми отличиями.

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Вот как выбрать случайный элемент в списке:

List<String> myList = new ArrayList<>();
myList.add("M4A1");
myList.add("Kilo");
myList.add("Grau");

int randomIndex = ThreadLocalRandom.current().nextInt(myList.size());

String randomGun = myList.get(randomIndex);

Значение randomGun будет одним из трех орудий.

Изменить :

Для случайного выбора списка вы можете создать Map списков:

Map<Integer, List<String>> myMap = new HashMap<>();
myMap.put(1, Arrays.asList("M4A1","Kilo","Grau"));
myMap.put(2, Arrays.asList("Merc","Ranger","Commando"));
myMap.put(3, Arrays.asList("50","60","70"));

int randomIndex = ThreadLocalRandom.current().nextInt(myMap.size());

List<String> randomList =  myMap.get(randomIndex);

Для простого проекта все в порядке, но если вы планируете расширить этот проект, я рекомендую использовать классы.

0 голосов
/ 03 августа 2020

Этого можно достичь, сохранив ваши значения в коллекции, к которой можно получить доступ по индексу, как вы делаете с вашим массивом. Затем вы генерируете случайное целое число от 0 до самого высокого индекса. Возьмите значение из коллекции по этому индексу. Вуаля.

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