Выходит крайне странная вещь, почему вылазит исключение если его не должно быть?
j + 2
написал для наглядности, что оно срабатывает, но при этом на
j + 1
оно выбрасывает исключение
Вот локальные данные на момент выброса исключения, то есть массив с которым я работаю как видите имеет размерность куда больше, чем
j + 1
при
j = 0
на первой итерации
Cуть этого цикла заключается в том, чтобы поменять местами буквы в слове согласно цифрам записанным в
key List
Весь код программы
class Generator
{
public static string Text { get; set; } = "Hello how are you";
static List<int> GenerationKey()
{
var words = Text.Split(' ');
var key = new List<int>();
int counter = 0;
// Запись ключа
for (int i = 0; i < words.Length; i++)
{
for (int j = 0; j < words[i].Length; j++)
{
key.Add(++counter);
}
counter = 0;
}
// Перемешивание ключа
var rand = new Random();
int step = 0;
for (int i = 0; i < words.Length; i++)
{
for (int j = 0; j < words[i].Length; j++)
{
int a = rand.Next(step, words[i].Length + step);
int b = rand.Next(step, words[i].Length + step);
int temp = key[a];
key[a] = key[b];
key[b] = temp;
}
step += words[i].Length;
}
return key;
}
public static void EncryptionText()
{
var key = GenerationKey();
var words = Text.Split(' ');
char[] letters;
for (int i = 0; i < words.Length - 1; i++)
{
letters = words[i].ToCharArray();
for (int j = 0; j < letters.Length; j++)
{
var temp = letters[key[j]];
letters[key[j]] = letters[key[j + 1]];
letters[key[j + 1]] = temp;
}
}
}
}