Подскажите, пожалуйста, как избежать ошибки "не все пути к коду возвращают значение"?
Задание - написать взлом шифра Цезаря методом полного перебора, разработав оконное приложение. В данной функции, которая в элемент textBox2 должна выводить варианты расшифровки, выскакивает озвученная ошибка.
public string CodeEncode(string text)
{
string alfphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
int m = alfphabet.Length;
List<string> result = new List<string>();
for (int y = 1; y < 32; y++)
{
result.Add(Shift(text, alfphabet, y));
}
int i = 0;
foreach (var word in result)
{
i++;
return "Попытка расшифровки №:" + i + " " + word;
}
}
static string Shift(string targetWord, string alfphabet, int key)
{
string result = string.Empty;
for (int i = 0; i < targetWord.Length; i++)
{
for (int j = 0; j < alfphabet.Length; j++)
{
if (targetWord[i] == alfphabet[j])
{
int temp = j + key;
while (temp >= alfphabet.Length)
temp -= alfphabet.Length;
result += alfphabet[temp];
}
}
}
return result;
}
Ответы (1 шт):
Всё очень просто.
Вот у Вас есть функция public string CodeEncode(string text). Она по своей сигнатуре должна вернуть строку. Но какой либо возврат у Вас происходит только внутри foreach (var word in result) - то есть, если цикл ни разу не выполнится - функция ничего не вернет.
Лучше напишите так, как во второй функции, где вы сразу заводите переменную, кторую будете возвращать, инициализируете еёё пустой строкой, а в конце - просто делате return <имя переменной>.
Кстати, похоже, что всё таки первая функция написана с ошибкой. Помому что если там написано return "Попытка расшифровки №:" + i + " " + word; - то в этом месте произойдёт возврат из функции, и дальше ничего выполняться не будет.
Думаю, что правильно записывать фразу "Попытка расшифровки #" прямо в текстбокс, хотя и здесь будут некотрые трудности, связанные с потоками (а именно - у приложения есть всего один поток, занимающийся отрисовкой. Если в нём же выполняется долгая операция - то он будет занят, и всё-всё напишет в текстбокс только в самом конце)
Но для шифра Цезаря - вроде должно нормально работать!