#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}"); }
Комментариев нет:
Отправить комментарий