"Пока! = -1" -1 ошибочно появляется в моих расчетах (C#) - PullRequest
0 голосов
/ 09 февраля 2020

Во-первых, просто хочу сказать, что я благодарен за этот сайт; это помогло мне найти правильный путь много раз, когда мне нужно было отладить.

Я ОЧЕНЬ зеленый с C #; Я студент, изучающий программирование. Я написал программу для расчета платы за парковку каждого человека, а затем сделал общую сумму для всех затрат на парковку. Следуя примеру из книги, я настроил «Пока» l oop так, чтобы он заканчивался только тогда, когда человек, вводящий данные, вводит «-1», в противном случае его постоянно просят ввести еще одну плату за парковку.

У меня были проблемы с получением полной платы за все, и я обратился к своему профессору. Он помог мне решить эту проблему, но создал другую и не осознал этого. Я не хочу, чтобы go вернулся в колодец во второй раз, особенно указать, что он создал новую проблему. Проблема в том, что когда вы вводите -1, чтобы остановить l oop, он возвращает итоговую сумму. Он не должен этого делать, он только для того, чтобы остановить l oop. Кроме того, общая сумма даже не точна; он принимает значение предыдущей записи (это так странно, что мне кажется, что это большая подсказка). Обратите внимание, что l oop останавливается в этой точке, так что это хорошо; он также не должен также возвращать плату за парковку.

Ниже приведена большая часть кода (я пропустил инициализации / объявления для переменных, но могу добавить их при необходимости). Я чувствую, что операторы While и If вообще не должны вычислять «-1»; Я не могу понять, как это «проходит»:

  while (hoursParked != -1)
  {
     Console.WriteLine("Enter each customer's total hours parked (no more than 24) or type -1 to quit: ");
     hoursParked = Double.Parse(Console.ReadLine());
     if (hoursParked > 0 && hoursParked < 3.0)
     {
        feeCharged = lessThan3Rate;
     }

     if (hoursParked >= 3.0 && hoursParked <= 18.00)
     {
        moreThan3thru18Rate = (2.00 + ((hoursParked - 2) * 0.50));
        feeCharged = moreThan3thru18Rate;

     if (hoursParked > 18.00)
     {
        feeCharged = moreThan18Rate; 
     }
     Console.WriteLine($"The customer's charge is: {feeCharged:C}");
     Console.WriteLine();

     totalAllReceipts = totalAllReceipts + feeCharged;//This will be the sum of all the fees charged. 
  }
  {
     Console.WriteLine("End of Day Totals:");
     Console.WriteLine($"The daily total of all receipts is: {totalAllReceipts:C}");
  }

Я уверен, что есть более эффективные способы выполнения вычислений и тому подобное, но это то, где мы находимся в классе с точки зрения понятий, так пожалуйста, игнорируйте код корректирующего уровня! ТИА за любую помощь!

Ответы [ 2 ]

3 голосов
/ 09 февраля 2020

Условие while оценивается только сверху l oop. Так что, если вы введете -1, остальная часть цикла все еще выполняется. Затем он оценил условие while и , а затем , рассчитав итоги.

Один из вариантов - использовать while(true) вместо этого, и прервать, если ввод равен -1:

while (true)
{
     Console.WriteLine("Enter each customer's total hours parked (no more than 24) or type -1 to quit: ");
     hoursParked = Double.Parse(Console.ReadLine());

     if(hoursParked == -1) break;

     if (hoursParked > 0 && hoursParked < 3.0)
     {
        feeCharged = lessThan3Rate;
     }
0 голосов
/ 09 февраля 2020

Попробуйте, если (hoursParked! = - 1) totalAllReceipts = totalAllReceipts + feeCharged;

...