Консоль выводит только половину от того, что должна вывести
У меня есть некий метод:
private static void DecodeMessage(string[] lines)
{
string text = string.Empty, result = string.Empty;
for (int i = lines.Length; i != 0; i--)
text += String.Format($"{lines[--i]} ");
string[] words = text.Split(' ');
for (int c = 0; c < words.Length; c++)
{
Console.WriteLine($"[{c}] — {words[c]}");
}
}
В параметры метода DecodeMessage передаётся массив, хранящий в себе:
{"решИла нЕ Упрощать и зашифРОВАтЬ Все послаНИЕ", "дАже не Старайся нИЧЕГО у тЕбя нЕ получится с расшифРОВкой", "Сдавайся НЕ твоего ума Ты не споСОбЕн Но может быть", "если особенно упорно подойдешь к делу", "", "будет Трудно конечнО", "Код ведЬ не из простых", "очень ХОРОШИЙ код", "то у тебя все получится", "и я буДу Писать тЕбЕ еще", "", "чао"}
По какой-то причине при запуске программы без отладчика (Ctrl+F5) на консоль выводит только половину. А при запуске программы с отладчиком, делая по одному шагу, на консоль выводится всё правильно.
В чём суть сей проблемы?
Ответы (2 шт):
for (int i = lines.Length; i != 0; i--)
^^^ один
text += String.Format($"{lines[--i]} ");
^^^ два
Вы два раза декрементируете переменную цикла i - один раз в конструкции цикла for и другой раз уже внутри цикла. Поэтому вы проскакиваете половину значений.
С отладчиком тоже не работает, либо, быть может вы отлаживаете не последнюю версию кода. Пересоберите проект, перезапустите студию, кроме шуток - иногда и это помогает.
Ну и как уже замечено, вы декрементируете счетчик дважды. Но я бы написал проще.
private static void DecodeMessage(string[] lines)
{
string text = string.Join(" ", lines.Reverse());
string[] words = text.Split();
for (int c = 0; c < words.Length; c++)
{
Console.WriteLine($"[{c}] — {words[c]}");
}
}
