Конкатенация строк в цикле. Джава

Я пытаюсь объединить строку в несколько циклов, и у меня с этим проблемы.

Я пытался сделать это с помощью "StringBuilder", но это приводит к утечке памяти. единственный способ разбудить его работу состоял в том, чтобы сделать это с помощью функции printf, что для меня нелогично. Я думал, что функция StringBuiler или concat() для String является более эффективным способом объединения строк. Вот пример рабочего кода:

    public static List<String> generateCoolNumbers() {
       final String[]  LETTERS = {"А", "В", "Е", "К", "М", "Н", "О", "Р", "С", "Т", "У", "Х"};
        List<String> coolNumber = new ArrayList<>();
        for (String letterOne : LETTERS) {
            for (int number = 111; number <= 999; number += 111) {
                for (String letterTwo : LETTERS) {
                    for (String letterThree : LETTERS) {
                        for (int region = 1; region < 200; region++) {
                            if (region <= 9) {
                                coolNumber.add(String.format("%s%d%s%s0%d", letterOne, number, letterTwo,
                                        letterThree, region));
                                continue;
                            }
                            coolNumber.add(String.format("%s%d%s%s%d", letterOne, number, letterTwo,
                                    letterThree, region));
                        }
                    }
                }
            }
        }
        return coolNumber;
    }

И что меня больше всего сбивает с толку, этот код ниже не работает из-за исключения «Java heap space», вместо того, чтобы быть более эффективным.


    public static List<String> generateCoolNumbers() {
       final String[]  LETTERS = {"А", "В", "Е", "К", "М", "Н", "О", "Р", "С", "Т", "У", "Х"};
        List<String> coolNumber = new ArrayList<>();
        StringBuilder strb = new StringBuilder();
        for (String letterOne : LETTERS) {
            for (int number = 111; number <= 999; number += 111) {
                for (String letterTwo : LETTERS) {
                    for (String letterThree : LETTERS) {
                        for (int region = 1; region < 200; region++) {
                            if (region <= 9) {
                                strb.append(letterOne);
                                strb.append(number);
                                strb.append(letterTwo);
                                strb.append(letterThree);
                                strb.append("0" + region);
                                coolNumber.add(strb.toString());
                                continue;
                            }
                            strb.append(letterOne);
                            strb.append(number);
                            strb.append(letterTwo);
                            strb.append(letterThree);
                            strb.append(region);
                            coolNumber.add(strb.toString());
                        }
                    }
                }
            }
        }
        return coolNumber;
    }

Этот код должен сгенерировать "крутой" номер автомобиля

Mrmojorisin 10.04.2022 13:12

Я полагаю, что пропущен шаг, превратите строку Builder в строку, а затем добавьте ее в свой массив

Zahra 10.04.2022 13:18
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не добавляли строки в список.

public static List<String> generateCoolNumbers() {
    final String[]  LETTERS = {"А", "В", "Е", "К", "М", "Н", "О", "Р", "С", "Т", "У", "Х"};
    List<String> coolNumber = new ArrayList<>();
    for (String letterOne : LETTERS) {
        for (int number = 111; number <= 999; number += 111) {
            for (String letterTwo : LETTERS) {
                for (String letterThree : LETTERS) {
                    for (int region = 1; region < 200; region++) {
                        StringBuilder strb = new StringBuilder();
                        if (region <= 9) {
                            strb.append(letterOne);
                            strb.append(number);
                            strb.append(letterTwo);
                            strb.append(letterThree);
                            strb.append("0" + region);
                            coolNumber.add(strb.toString());
                            continue;
                        }
                        strb.append(letterOne);
                        strb.append(number);
                        strb.append(letterTwo);
                        strb.append(letterThree);
                        strb.append(region);
                        coolNumber.add(strb.toString());
                    }
                }
            }
        }
    }
    return coolNumber;
}

Извините, я забыл вставить сюда тех. Я сделал все это, но проблема связана с исключением «Java heap space».

Mrmojorisin 10.04.2022 13:23

Что интересно для меня, когда я использую функцию printf, она работает нормально

Mrmojorisin 10.04.2022 13:25

Вам нужно создать экземпляр stringbuilder внутри самого вложенного цикла.

Mainak Sethi 10.04.2022 13:25
Ответ принят как подходящий

Вам нужно очистить или сбросить построитель строк внутри вашего цикла:

public static ArrayList<String> generateCoolNumbers() {
   final String[]  LETTERS = {"A", "B", "E", "K"};
    ArrayList<String> coolNumber = new ArrayList<String>();
    for (String letterOne : LETTERS) {
        for (int number = 111; number <= 999; number += 111) {
            for (String letterTwo : LETTERS) {
                for (String letterThree : LETTERS) {
                    for (int region = 1; region < 200; region++) {
                                StringBuilder strb = new StringBuilder();

                        if (region <= 9) {
                            strb.append(letterOne);
                            strb.append(number);
                            strb.append(letterTwo);
                            strb.append(letterThree);
                            strb.append("0" + region);
                        } else {
                        strb.append(letterOne);
                        strb.append(number);
                        strb.append(letterTwo);
                        strb.append(letterThree);
                        strb.append(region);
                        }
                    coolNumber.add(strb.toString());
                    }
                }
            }
        }
    }
    return coolNumber;
}

вы также можете использовать strb.setLength(0);

Да! strb.setLength(0); сделал это!)

Mrmojorisin 10.04.2022 13:33

Другие вопросы по теме