dashinash Ответов: 1

Как заставить работать раздел кода "удалить запись"?


Это то, что я использую сейчас, и все, что появляется в консоли, - это
"Удалить ход"
Этот код абсолютно ничего не делает, и я не знаю почему...
Пожалуйста помочь.
else if (menuChoice == 4)
{
	Console.WriteLine("Delete a Movie");
	newShowTitles = new string[showTitles.Length - 1];

	if (a < showTitles.Length)
	{
		if (a != (delete - 1))
		{
			newShowTitles[b] = showTitles[a];
			b++;
		}
		a++;
	}

	for (int c = 0; c < newShowTitles.Length; c++)
	{
		showTitles[c] = newShowTitles[c];
	}
	num--;
}


Что я уже пробовал:

else if (menuChoice == 4)
{
	Console.WriteLine("Delete a Movie");

	for (i = delete - 1; i < showTitles.Length; i++)
	{
		showTitles[i] = showTitles[i + 1];
	}

	Console.WriteLine("New List:");

	for (i = 0; i < showTitles.Length; i++)
	{
		Console.WriteLine("Movies[" + (i + 1) + "]: " + showTitles[i]);
		showTitles[i] = Console.ReadLine();
	}

	Console.WriteLine();
}

Afzaal Ahmad Zeeshan

Вы не печатаете ничего другого на консоли, так как же вы можете видеть что-то еще в консоли?

Во-вторых, логический аспект программы можно отлаживать только с помощью отладчика. Запустите программу с помощью Visual Studio и установите точку останова в этом операторе if. Затем двигайтесь шаг за шагом, чтобы проверить, чего не хватает.

1 Ответов

Рейтинг:
2

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!