#c# #while-loop
#c# #цикл while
Вопрос:
Я пытаюсь написать программу, которая принимает цену и уплаченную сумму и выводит номиналы изменений. У меня возникли проблемы со следующим.
- Мне также хотелось бы, чтобы печатались только применимые номиналы изменений (т.е., Если изменение равно 71, показывайте только FithyBills = 1, TwentyBills = 1 и Bills = 1 и игнорируйте остальные). В настоящее время он показывает все с другими записанными как десять счетов = 0 и так далее).
Вот код
using System;
namespace ChangeCalulator
{
class Program
{
static void Main(string[] args)
{
Console.Write("Item Price: ");
int price = Convert.ToInt32(Console.ReadLine());
Console.Write("Amount Paid: ");
int paid = Convert.ToInt32(Console.ReadLine());
while (paid < pice)
{
Console.WriteLine("You have paid less than the price");
Console.Write("Paid: ");
paid = Convert.ToInt32(Console.ReadLine());
}
decimal changeamount = paid - price;
Change change = new Change(changeamount);
//This displays the change based on each denominantion
Console.WriteLine($"Hundred SEK Bills: {change.HundredBills}");
Console.WriteLine($"Fifty SEK Bills: {change.FiveBills}");
Console.WriteLine($"Twenty SEK Bills: {change.TwentyBills}");
Console.WriteLine($"Ten SEK Bills: {change.TenBills}");
Console.WriteLine($"Five SEK Bills: {change.FiveBills}");
Console.WriteLine($"One SEK: {change.Bills}");
Console.ReadKey();
}
}
//The Change class will create a public integer variable for each denomination and store the values.
public class Change
{
private int changeamount;
public int HundredBills { get; }
public int FiftyBills { get; }
public int TwentyBills { get; }
public int TenBills { get; }
public int FiveBills { get; }
public int Bills { get; }
//This calculates the number of each denomination the amount equals
public Change(decimal price)
{
HundredBills = (int)(changeamount / 100);
price %= 100;
FiftyBills = (int)(changeamount / 50);
price %= 50;
TwentyBills = (int)(changeamount / 20);
price %= 20;
TenBills = (int)(changeamount / 10);
price %= 10;
FiveBills = (int)(changeamount / 5);
price %= 5;
Bills = (int)(changeamount / 1);
price %= 1;
}
}
}
Любая помощь по этому вопросу очень ценится.
Комментарии:
1. Итак, в чем именно проблемы? Не заставляйте нас гадать или тратить годы, пытаясь понять это. Пожалуйста, объясните, где именно вы застряли. Сделайте так, чтобы людям было проще помогать вам!
2. Можете ли вы объяснить немного больше по вашему 2-му пункту. Это непонятно. Предположим, что счет равен 71, тогда что вы хотите напечатать?
3.
Console.WriteLine($"Fifty SEK Bills: {change.FiveBills}");
Должно ли это бытьchange.FiftyBills
?4. Я внес изменения и прояснил вопросы. Спасибо вам.
5. Похоже, вам нужно пересчитать
changeamount
после установки каждой*Bills
суммы. И перед вызовом проверьте каждое*Bills
свойство на 0Console.WriteLine
. Мой предыдущий комментарий остается…
Ответ №1:
В конструкторе public Change(decimal price)
вам нужно использовать price
:
public Change(decimal price)
{
HundredBills = (int)(price / 100);
price %= 100;
FiftyBills = (int)(price / 50);
price %= 50;
TwentyBills = (int)(price / 20);
price %= 20;
TenBills = (int)(price / 10);
price %= 10;
FiveBills = (int)(price / 5);
price %= 5;
Bills = (int)(price / 1);
price %= 1;
}
Затем вы можете удалить ненужное changeamount
поле.
Рабочая демонстрация: https: //dotnetfiddle.net/NbyZPc
Что касается того, чтобы не печатать значения 0, простая if (theValue > 0)
проверка вокруг каждой строки записи должна выполнить это.
Комментарии:
1. Спасибо. Это устранило вторую проблему