Работа с массивом C#
Помогите, пожалуйста, найти ошибку в коде. Суть ошибки такова, что значение переменной y
постоянно больше размера массива (32), что в дальнейшем вызывает ошибку:
System.IndexOutOfRangeException.
string msg, abc, key, enmsg;
int n = 32; // количество символов в таблице
char [,] tabl = new char[n,n];
msg = Convert.ToString(textBox1.Text); // получение сообщения
key = Convert.ToString(textBox2.Text); // получение ключа
abc = "абвгдеёжзиёклмнопрстуфхцчшщъыьэюя"; // русский алфавит
enmsg = Convert.ToString("0");
// формирование таблицы
for (int i = 0; i < n; i++)
{
if (i == 0)
{
for (int j = 0; j < n; j++)
{
tabl[i, j] = abc[j];
}
}
else
{
for (int j = i; j < n; j++)
{
tabl[i, j] = abc[j];
}
for (int j = 0; j < i; j++)
{
tabl[i, j] = abc[j];
}
}
}
int msgLen = Convert.ToInt32(msg.Length); // длина сообщения
int keyLen = Convert.ToInt32(key.Length); // длина ключа
int k = 0;
int t = 0;
int p = 0;
int x = 0;
int y = 0;
while(true)
{
for(int j = 0; j < n; j++)
{
if (msg[t] == tabl[0, j])
{
y = tabl[0, j];
}
}
for (int i = 0; i < n; i++)
{
if (key[p] == tabl[i, 0])
{
x = tabl[i, 0];
}
}
if (k == 0)
{
enmsg = Convert.ToString(tabl[x, y]);
}
else
{
enmsg = enmsg + Convert.ToString(tabl[x, y]);
}
k++;
if (k == msgLen) break;
if (p > keyLen) p = 0;
}
textBox3.Text = enmsg; // вывод результата
Источник: Stack Overflow на русском