Почему массив заполняется, повторяя последний символ предыдущей строки? - C#
Формулировка задачи:
Здравствуйте, подскажите почему массив заполняется повторяя последний символ предыдущей строки. Смысл в том, что массив после ключевого слова заполняется всеми буквами алфавита, кроме тех, что в ключевом слове. Также из алфавита удаляются буквы Ё (заменяется буквой Е) и буква Й (заменяется буквой И). Буквы Ъ и Ь считаются одной и той же буквой.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PlayFairCipher
{
class Cipher
{
char[] alphaMap; //alphaMap будет содержать все буквы от а до я
string keyword; //Ключ пользователя
char[,] LookupTable;
public Cipher()
{
alphaMap = new char[31]; // заполняем alphamap
for (int i = 0; i < 31; i++)
{
int t = (int)'а';
alphaMap[i] = (char)(t + i);
}
LookupTable = new char[5, 6];
}
//Этот метод берет ключевое слово и генерирует таблицу
public void generateTable()
{
int k = 0;
int i = 0;
int j = 0;
int[] flagarray; //флаг массив используется, чтобы сообщить, если готов алфавит
flagarray = new int[31];// покрыты в массиве или нет
Console.WriteLine("Введите ваш ключ: ");
string inputText = Console.ReadLine();
for (i = 0; i < inputText.Length; i++)
if (Char.IsLetter(inputText[i]))
{
if (inputText[i] != 'й')
keyword += inputText[i];
else
keyword += 'и';
}
keyword = keyword.ToLower();
char[] table;
table = new char[31];
for (k = 0, i = 0; i < keyword.Length; i++)
{
int p = (int)keyword[i] - (int)('а');
if (flagarray[p] != 1)
{
table[k] = keyword[i];
flagarray[p] = 1;
k++;
}
}
for (j = 0; j < 31; j++)
{
if (flagarray[j] == 0)
{
table[k] = alphaMap[j];
k++;
}
}
for (i = 0; i < 5; i++)
{
for (j = 0; j < 6; j++)
{
LookupTable[i, j] = table[i * 5 + j];
}
}
}
public void Display()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 6; j++)
{
Console.Write(LookupTable[i, j] + " ");
}
Console.WriteLine();
}
}
}
class Program
{
static void Main(string[] args)
{
Cipher c1 = new Cipher();
c1.generateTable();// Generate a Look Up Table
c1.Display();//Display the Look Up Table
Console.ReadLine();
}
}
}Решение задачи: «Почему массив заполняется, повторяя последний символ предыдущей строки?»
textual
Листинг программы
string s = "ключключ" + "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
char[,] LookupTable = new char[5, 6];
s.ToLower()
.Replace('ё', 'е')
.Replace('й', 'и')
.Replace('ъ', 'ь')
.Distinct()
.Take(5 * 6)
.Aggregate(0, (i, c) => {
LookupTable[i / 6, i % 6] = c;
return i + 1;
});