#c_sharp #инспекция_кода
Я сделал задачу из одного известного курса. Задача заключается в том, что у нас есть долг и мы можем оплатить его сразу либо по частям. Но условие состоит в том, что твой следующий платёж должен быть больше чём предыдущий. С самой задачей я справился, но смотря на код, думаю, что он очень запутанный и сложный. Вот он: using System; class Program { static void Main() { int maxSum = 700; int payment = 0; int previousPayment = 0; int moneyToPay = 0; while(maxSum != 0) { do { Console.WriteLine("Введите сумму платежа"); payment = int.Parse(Console.ReadLine()); //previousPayment = payment; moneyToPay = debt(payment, ref maxSum, ref previousPayment); if (moneyToPay == 0) { break; } } while (false); if(moneyToPay == -1) { break; } } Console.ReadKey(); } static int debt(int a,ref int maxSum, ref int previousPayment) { if (a == maxSum) { Console.WriteLine("Долг погашен"); return maxSum = 0; } else if (a < maxSum) { int Debt = maxSum - a; if(a < previousPayment) { Console.WriteLine("Вы должны оплатить сумму больше чём {0}", previousPayment); return -1; } Console.WriteLine("Ваш долг составляет:{0}", Debt); maxSum = Debt; previousPayment = a; return Debt; } else { Console.WriteLine("Долг погашен"); Console.WriteLine("Переполнение составляет:{0}", a - maxSum); return maxSum = 0; } } }
Ответы
Ответ 1
Ваш код действительно излишне запутан, большая часть ошибок типична для новичков, главное что вы САМИ нашли решение задачи, это уже огромный плюс. Немного об ошибках. конструкция do{...}while(false) выполняется строго один раз, таким образом бесполезна и может быть удалена. while(maxSum != 0) осторожнее с использованием такого условия, т.к. цикл будет завершен строго при maxSum == 0, в данной задаче лучше было использовать условие while(maxSum > 0). static int debt(int a,ref int maxSum, ref int previousPayment) очень хорошо, что вы смогли разобраться с передачей параметров по ссылке, но в данном случае было бы правильнее объявить maxSum и previousPayment приватными статическими полями класса, и обращаться к ним напрямую из метода. Это похоже на глобальные переменные, но только в пределах класса. немного запутана последовательность действий и видно, так сказать, ход ваших мыслей в процессе поиска. Нужно было еще раз посмотреть на найденное решение и постараться найти повторяющиеся моменты. Но это нормально для начала и придет с опытом, если не будете останавливаться на достигнутом. Код можно изрядно сократить без ущерба "читаемости", например вот так: void Main() { int debt = 700; int lastPayment = 0; while(debt > 0) { Console.WriteLine("Введите сумму платежа"); int payment = int.Parse(Console.ReadLine()); while(payment <= lastPayment) { Console.WriteLine($"Вы должны оплатить сумму больше чём {lastPayment}"); payment = int.Parse(Console.ReadLine()); } lastPayment = payment; debt -= payment;//debt = debt - payment на всякий случай } Console.WriteLine("Долг погашен"); //как только долг стал меньше или равен 0, его модуль равен сумме переплаты, этим и воспользуемся. if(debt < 0) Console.WriteLine($"Переплата составляет:{-debt}"); }
Комментариев нет:
Отправить комментарий