Индекс находился вне границ массива. C#
Чувствую, что не правильно где-то реализовал формулу Decrypt(cn) = (Q + cn - kn) % Q.
private void button1_Click(object sender, EventArgs e)
{
string m = textBox1.Text;
string k = textBox2.Text;
int nomer;
int d;
string s;
int j, f;
int t = 0;
char[] massage = m.ToCharArray();
char[] key = k.ToCharArray();
char[] alfavit = { 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
for (int i = 0; i < massage.Length; i++)
for (j = 0; j < alfavit.Length; j++)
{
if (massage[i] == alfavit[j])
{
break;
}
}
//------------//
{
nomer = j; // Индекс буквы 4
введите сюда код
if (t > key.Length - 1) { t = 0; }
for (f = 0; f < alfavit.Length; f++)
{
if (key[t] == alfavit[f])
{
break;
}
}
t++;
if (f != 33)
{
d = nomer - f;
}
else
{
d = nomer;
}
if (d > 32)
{
d = d - 33;
}
massage[i] = alfavit[d];
}
s = new string(massage);
textBox3.Text = s;
}
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Если цикл
for (j = 0; j < alfavit.Length; j++)
{
if (massage[i] == alfavit[j])
{
break;
}
}
завершился штатным образом, то j равно alfavit.Length, т.е. alfavit[nomer] за пределами массива. Вот и причина выхода за границу.