#c#
#c#
Вопрос:
В моей проблеме я пытаюсь вывести сводку продаж для комиссии сотрудников по продажам. Один из необходимых столбцов — «Продано», который требует, чтобы вы получили количество проданных продуктов для этого конкретного продукта. Проблема, с которой я сталкиваюсь, заключается в том, что переменная numberold инициализируется в цикле While, и, похоже, я не могу ее использовать из-за этого. Каков наилучший вариант для того, чтобы иметь возможность ее использовать. Любые другие советы о том, как сделать мои сообщения более чистыми, также будут оценены, поскольку я чувствую, что есть лучший способ сделать это по сравнению с тем, как я его получаю.
decimal grossSales = 0; // total gross sales
decimal earnings; // earnings made from sales
int product = 0; // the product number
int numberSold; // number sold of a given product
decimal commission1 = .09M;
decimal commission2 = .0925M;
decimal commission3 = .0701M;
decimal commission4 = .095M;
decimal commission5 = .10M;
decimal commission6 = .083M;
decimal basePay = 250.00M;
decimal product1CommEarnings = 0.00M;
decimal product2CommEarnings = 0.00M;
decimal product3CommEarnings = 0.00M;
decimal product4CommEarnings = 0.00M;
decimal product5CommEarnings = 0.00M;
decimal product6CommEarnings = 0.00M;
while ( product < 6 )
{
product;
// prompt for and read number of the product sold from user
Console.Write( "Enter number sold of product # {0} -> ",
product );
numberSold = Convert.ToInt32( Console.ReadLine() );
// determine gross of each individual product and add to total
if (product == 1)
{
grossSales = numberSold * 239.99M;
product1CommEarnings = Math.Round(commission1 * numberSold * 239.99M, 2);
}
else if (product == 2)
{
grossSales = numberSold * 129.75M;
product2CommEarnings = Math.Round(commission2 * numberSold * 129.75M, 2);
}
else if (product == 3)
{
grossSales = numberSold * 99.95M;
product3CommEarnings = Math.Round(commission3 * numberSold * 99.95M, 2);
}
else if (product == 4)
{
grossSales = numberSold * 350.89M;
product4CommEarnings = Math.Round(commission4 * numberSold * 350.89M, 2);
}
else if (product == 5)
{
grossSales = numberSold * 100.00M;
product5CommEarnings = Math.Round(commission5 * numberSold * 100.00M, 2);
}
else if (product == 6)
{
grossSales = numberSold * 1000.00M;
product6CommEarnings = Math.Round(commission6 * numberSold * 1000.00M, 2);
}
} // end while loop
Console.WriteLine("n");
Console.WriteLine(" Commission Price Comm");
Console.WriteLine(" Sales Summary Earnings Sold Each Extentsion Rate");
Console.WriteLine(" ------------- ---------- ---- ----- --------- ----");
Console.WriteLine($" Base Pay {basePay:C} ");
Console.WriteLine($" Product 1 {product1CommEarnings} ");
Console.WriteLine($" Product 2 {product2CommEarnings} ");
Console.WriteLine($" Product 3 {product3CommEarnings} ");
Console.WriteLine($" Product 4 {product4CommEarnings} ");
Console.WriteLine($" Product 5 {product5CommEarnings} ");
Console.WriteLine($" Product 6 {product6CommEarnings} ");
Комментарии:
1. В: Есть ли у меня способ вывести переменную, которая инициализируется в цикле? A: Конечно. Просто объявите переменную вне цикла. В: Есть ли конкретная проблема с кодом, который вы показали?
2.
numberSold
объявляется вне цикла с другими переменными, поэтому, если вы получаете ошибку, вы должны поделиться ею, чтобы мы могли работать над решением правильной проблемы3. Не уверен, как я пропустил ее объявление вне цикла, похоже, все, что мне нужно было сделать, это присвоить переменной. Извините за это и спасибо за помощь.
4. ТАКЖЕ: пожалуйста, рассмотрите возможность использования блока переключения вместо набора операторов «if / else». И обязательно убедитесь, что вы всегда обнаруживаете и обрабатываете случай «ничего из вышеперечисленного»! Что, если вашим крупнейшим продавцом за месяц был «Продукт 7»? 😉
5. @paulsm4 что не так с if / else
Ответ №1:
Вы должны инициализировать numberSold .
int numberSold = 0; //initial value will be discarded by the loop.
Но вы все равно не получите numberSold для каждого элемента, поскольку вы переписываете его в цикле, и печатаемое значение будет значением из последней итерации цикла.
Используйте класс записи или кортеж для сохранения значений с каждой итерации.
Комментарии:
1. Отличное предложение: рекомендую сохранить значения в классе (или классах).