2015-04-27 1 views
-2

Это консольное приложение должно отображать цены, а затем устанавливать его в среднем формате и меньше чем NUM и выше, чем NUM, которое я полностью смущен. Итоговые и Средние выходят в нужную сумму, а не только на более раннем и более высоком уровне.C# Консоль не добавляет значения правильно, и я не уверен, почему:/

КОД:

  double[] prices = new double[5]; 
     int count = 0; 
     double TotalValues = 0; 
     double Average = 0; 
     string inputString; 
     double lessthanfive = 0; 
     double higherthanaverage = 0; 
     int x; 
     for (x = 0; x < prices.Length; x++) 
     { 
      count += 1; 
      Console.Write("Enter the price for {0}: ", count); 
      inputString = Console.ReadLine(); 
      prices[x] = Convert.ToDouble(inputString); 
      TotalValues += prices[x]; 
      Average = TotalValues/prices.Length; 
      if (prices[x] < 5) 
       lessthanfive++; 

      if (prices[x] > Average) 
       higherthanaverage++; 
     } 
     Console.WriteLine(); 
     Console.WriteLine("The Sum of The Values Are: {0}", TotalValues.ToString("C2")); 
     Console.WriteLine("Numbers Less Than $5.00 Are: {0}", lessthanfive.ToString("C2")); 
     Console.WriteLine("The Average of The 20 Prices Are: {0}", Average.ToString("C2")); 
     Console.WriteLine("Numbers Higher then Average Are: {0}", higherthanaverage.ToString("C2")); 
     Console.ReadLine(); 
+0

Итак ... что случилось? –

+0

Не могли бы Вы быть более конкретными в отношении вашей проблемы? Вы отлаживали свой код и точно видите, что именно такое переменное? –

+0

Когда я запустил его, сумма и средний результат вычисляются правильно, а не менее 5,00 и выше, чем в среднем – Arkanos

ответ

0

Ваше среднее значение будет неправильным, и ваш счет будет отключен из-за этого. Вычисление всего за пределами этого цикла также облегчит отладку. Теперь это не самое элегантное решение, но оно использует список для использования встроенных функций Sum и Average, а также позволяет перечислить ваш список, если вы не хотите добавлять 20 номеров каждый раз.

 List<decimal> prices = new List<decimal>(); 
     int numPrices; 
     decimal totalPrice; 
     decimal averagePrice; 
     string inputString; 
     int lessThanFive = 0; 
     int higherThanAverage = 0; 

     Console.Write("Enter the number of prices that you will be entering: "); 
     numPrices = Convert.ToInt32(Console.ReadLine()); 

     for (int i = 0; i < numPrices; i++) 
     { 
      Console.Write("Enter the price for item #{0}: $", i+1); 
      inputString = Console.ReadLine(); 
      prices.Add(Convert.ToDecimal(inputString)); 
     } 

     totalPrice = prices.Sum(); 
     averagePrice = prices.Average(); 

     foreach (decimal item in prices) 
     { 
      if (5 > item) 
      { 
       lessThanFive++; 
      } 
      if (averagePrice > item) 
      { 
       higherThanAverage++; 
      } 
     } 

     Console.WriteLine(); 
     Console.WriteLine("The sum of the values are: {0:C}", totalPrice); 
     Console.WriteLine("The number of prices less than $5.00 are: {0}", lessThanFive); 
     Console.WriteLine("The average of the prices entered is: {0:C}", averagePrice); 
     Console.WriteLine("The number of prices that are higher than average are: {0}", higherThanAverage); 
     Console.ReadLine(); 

Теперь, я использовал десятичную вместо двойной для них, потому что, ну, в данном примере это, конечно, не нужно будет двойной для чего-нибудь, но он может быть преобразован обратно без каких-либо проблем. Также добавлено небольшое форматирование строк и т. Д. Главное, я проверил математику, и она работает.

2

Вы не можете знать, в среднем, пока последнее значение не было введено, так что вам нужен еще один цикл для подсчета количества элементов выше среднего:

for (x = 0; x < prices.Length; x++) 
{ 
    count += 1; 
    Console.Write("Enter the price for {0}: ", count); 
    inputString = Console.ReadLine(); 
    prices[x] = Convert.ToDouble(inputString); 
    TotalValues += prices[x]; 
    if (prices[x] < 5) { 
    lessthanfive++; 
    } 
} 

Average = TotalValues/prices.Length; 

for (x = 0; x < prices.Length; x++) 
{ 
    if (prices[x] > Average) { 
    higherthanaverage++; 
    } 
} 
0

Среднее значение вычисляется в неправильном объеме (внутри цикла), а также является более высоким. Чтобы исправить это:

class Program 
{ 
    static void Main(string[] args) 
    { 
     double[] prices = new double[5]; 
     int count = 0; 
     double TotalValues = 0; 
     double Average = 0; 
     string inputString; 
     double lessthanfive = 0; 
     double higherthanaverage = 0; 
     int x; 
     for (x = 0; x < prices.Length; x++) 
     { 
      count += 1; 
      Console.Write("Enter the price for {0}: ", count); 
      inputString = Console.ReadLine(); 
      prices[x] = Convert.ToDouble(inputString); 
      TotalValues += prices[x]; 
      if (prices[x] < 5) 
       lessthanfive++; 
     } 

     Average = prices.Average(); 
     higherthanaverage = prices.Where(price => price > Average).Count(); 

     Console.WriteLine(); 
     Console.WriteLine("The Sum of The Values Are: {0:C2}", TotalValues); 
     Console.WriteLine("Numbers Less Than $5.00 Are: {0:C2}", lessthanfive); 
     Console.WriteLine("The Average of The 20 Prices Are: {0:C2}", Average); 
     Console.WriteLine("Numbers Higher then Average Are: {0:C2}", higherthanaverage); 
     Console.ReadLine(); 
    } 
}