Ваш код имеет логическую ошибку во вложенных циклах. Вы увеличиваете переменную region внутри цикла while, который зависит от переменной number. Это означает, что когда number достигает 1000, цикл while прерывается, и region увеличивается на 1 в цикле do-while. Затем number сбрасывается на 111, и цикл while повторяется, но только для одного значения region. Поэтому вы видите только номера для регионов от 1 до 9.
Чтобы исправить это, вам нужно увеличивать region внутри цикла for, который зависит от массива letter. Таким образом, вы будете генерировать номера для всех регионов для каждого значения number.
Исправленный код и проверенный что цикл все работает до конца:
import java.util.Scanner;
import java.util.HashSet;
import java.util.TreeSet;
import java.util.ArrayList;
public class Main
{
public static void main(String[] args)
{
String[] letters = {"С" , "М" , "Т" , "В" , "А" , "Р" , "О" , "Н" , "Е" , "У"};
String firstNumber = "000";
int number = Integer.parseInt(firstNumber);
int regions = 197;
int region = 1;
ArrayList first = new ArrayList<>();
numbersGeneration(first , letters);
}
private static void numbersGeneration (ArrayList array , String[] letter)
{
long start = System.currentTimeMillis();
int number = 111;
int region = 1;
int regions = 197;
do {
while (number < 1000) {
for (int j = 0; j < letter.length; j++) {
String blatnoiNumber = letter[j] + number + letter[j] + letter[j] + " " + region;
System.out.println( "\n" + blatnoiNumber);
array.add(blatnoiNumber);
System.out.println("Добавлено!");
region++; // переместить сюда
}
number += 111;
// region++; // удалить отсюда
}
}while(region < 198);
long end = System.currentTimeMillis();
int time = (int)(end - start);
System.out.println("\nОперация заняла " + time + " мс");
}
}
код:
import java.util.Scanner;
import java.util.HashSet;
import java.util.TreeSet;
import java.util.ArrayList;
public class Main
{
public static void main(String[] args)
{
String[] letters = {"С" , "М" , "Т" , "В" , "А" , "Р" , "О" , "Н" , "Е" , "У"};
String firstNumber = "000";
int number = Integer.parseInt(firstNumber);
int regions = 197;
int region = 1;
ArrayList<String> first = new ArrayList<>();
numbersGeneration(first , letters);
}
private static void numbersGeneration (ArrayList<String> array , String[] letter)
{
long start = System.currentTimeMillis();
int number = 111;
int region = 1;
int regions = 197;
do {
while (number < 1000) {
for (int j = 0; j < letter.length; j++) {
String blatnoiNumber = letter[j] + number + letter[j] + letter[j] + " " + region;
System.out.println( "\n" + blatnoiNumber);
array.add(blatnoiNumber);
System.out.println("Добавлено!");
}
number += 111;
region++;
}
}while(region < 198);
long end = System.currentTimeMillis();
int time = (int)(end - start);
System.out.println("\nОперация заняла " + time + " мс");
}
}
При запуске region доходит до 9 и все,принт дальше ничего не показывает, хотя должен до 197.Последняя команда при этом не запускается, значит, что цикл продолжается, но вывода нет. Что такое?