Naser Sadeghi Ответов: 1

Как решить проблему застревания двух вложенных циклов for?


Я закодировал приложение C# Windows Form, где есть два вложенных для циклов. как показано ниже:

List<int> My_LIST = new List<int>();

List<string> RESULT_LIST = new List<string>();
int[] arr = My_LIST.ToArray();

for (int i = 0; i < arr.Length; i++)
{
  int counter = i;
  for (int j = 1; j <= arr.Length; j++)
  {
   if (counter == arr.Length)
   {
     counter = 0;
   }
   sb.Append(arr[counter].ToString());
   RESULT_LIST.Add(sb.ToString());
   counter++; 
   }
 sb.Clear();
}


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

Когда длина массива достигает 3000 или более, программа застревает. Как я могу исправить эту проблему?

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

Что я уже пробовал:

Во-первых, я использовал обычную строку для получения комбинаций, и мой код был таким, как показано ниже:

string s = "";


вместо этого:

StringBuilder sb = new StringBuilder();


Я подумал, что может возникнуть проблема с максимальной длиной обычной строки, и поэтому изменил ее на
StringBuilder
но проблема не была решена.

Richard MacCutchan

Что вы имеете в виду под этим "программа застревает"?

jekin77

почему вы конвертируете список < gt; В массив?
почему вы используете StringBuilder?

это все совершенно не нужные шаги !!!!

попробуй вот это ;)

List<int> My_LIST = new List<int>();
List<string> TMP_LIST = new List<string>();
List<string> RESULT_LIST = new List<string>();

for (int i = 0; i < My_LIST.Count; i++)
{
    TMP_LIST.Clear();
    int counter = i;
    foreach (var item in My_LIST)
    {
        if (counter == My_LIST.Count)
            counter = 0;
        TMP_LIST.Add(My_LIST[counter].ToString());
        counter++;
    }
	RESULT_LIST.Add(string.Join("", TMP_LIST));
}

1 Ответов

Рейтинг:
1

Patrice T

Цитата:
программа застревает

Это не информативно, и это тоже не последние новости, все приходят сюда, потому что их программа не работает, не падает и не застревает. Что значит "застрять" ?
Цитата:
Я использовал этот код, чтобы взять любую комбинацию символов, которые находятся внутри моего массива.

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

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.