Я пытаюсь объединить строку в несколько циклов, и у меня с этим проблемы.
Я пытался сделать это с помощью "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;
}
Я полагаю, что пропущен шаг, превратите строку Builder в строку, а затем добавьте ее в свой массив
Вы не добавляли строки в список.
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».
Что интересно для меня, когда я использую функцию printf, она работает нормально
Вам нужно создать экземпляр stringbuilder внутри самого вложенного цикла.
Вам нужно очистить или сбросить построитель строк внутри вашего цикла:
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); сделал это!)
Этот код должен сгенерировать "крутой" номер автомобиля