Почему массив заполняется, повторяя последний символ предыдущей строки? - 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; 
    });

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы