使用数组进行统计(十进制)

时间:2018-08-05 05:40:57

标签: c# arrays loops

我是这里的新手。
我正在尝试使用编码显示平均值,最大值和最小值的统计信息。
他们说我无法将decimal[]转换为int[]时出现错误。我已在代码旁注释了以下错误。这是最后几行之一。
我必须为此项目使用Arrays,并且值必须在decimal中。

谢谢你,如果我做错了事,我是新来的。

namespace Group_Project_Final
{
    public partial class LoanRates : Form
    {
        public LoanRates()
        {
            InitializeComponent();
        }

        private double Average (int [] iArray)
        {
            int total = 0;
            double average;

            for(int index=0;index<iArray.Length;index++)
            {
                total += iArray[index];
            }
            average = (double)total / iArray.Length;
            return average;
        }
        private decimal Highest (int [] iArray)
        {
            int highest = iArray[0];

            for (int index =1; index<iArray.Length;index++)
            {
                if(iArray[index]>highest)
                {
                    highest = iArray[index];
                }               
            }
            return highest;
        }
        private decimal Lowest(int [] iArray)
        {
            int lowest = iArray[0];

            for (int index =1; index<iArray.Length; index++)
            {
                if(iArray[index]<lowest)
                {
                    lowest = iArray[index];
                }
            }
            return lowest;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            Home form1 = new Home();
            form1.Show();
        }

        private void button7_Click(object sender, EventArgs e)
        {
            decimal [] rates = { 1.60m, 1.65m ,1.62m, 1.55m, 1.68m, 1.58m };

            int index = 0;
            decimal highestRate; 
            decimal lowestRate;
            double averageRate;

            while(index<rates.Length)
            {
                decimal.ToInt32(rates[index]);
                index++;
            }

            highestRate = Highest(rates); //i am having the error here where they say "cannot simply convert decimal[] to int[] 
            lowestRate = Lowest(rates);
            averageRate = Average(rates); 

            txtAvg.Text = averageRate.ToString();
            txtHighest.Text = highestRate.ToString();
            txtLowest.Text = lowestRate.ToString();
        }
    }
}

3 个答案:

答案 0 :(得分:4)

只需将它放在那里,

仅使用linq的BCL方法,您可以减少90%的代码。

它立即解决了您的投射和打字问题

using System.Linq;

...

private void button7_Click(object sender, EventArgs e)
{
   decimal[] rates = { 1.60m, 1.65m, 1.62m, 1.55m, 1.68m, 1.58m };
   txtAvg.Text = rates.Max().ToString();
   txtHighest.Text = rates.Min().ToString();
   txtLowest.Text = rates.Average().ToString();
}

答案 1 :(得分:2)

如果需要decimal数组,请根据decimal更改函数。

private double Average(decimal[] iArray)
{
  decimal total = 0;
  double average;

  for (int index = 0; index < iArray.Length; index++)
  {
    total += iArray[index];
  }
  average = (double)total / iArray.Length;
  return average;
}
private decimal Highest(decimal[] iArray)
{
  decimal highest = iArray[0];

  for (int index = 1; index < iArray.Length; index++)
  {
    if (iArray[index] > highest)
    {
      highest = iArray[index];
    }
  }
  return highest;
}
private decimal Lowest(decimal[] iArray)
{
  decimal lowest = iArray[0];

  for (int index = 1; index < iArray.Length; index++)
  {
    if (iArray[index] < lowest)
    {
      lowest = iArray[index];
    }
  }
  return lowest;
}

答案 2 :(得分:2)

现在,您的函数LowestHighest采用int数组,而不是decimal数组。现在,您的行decimal.ToInt32(rates[index]);无济于事,因为它只是解决了该索引的等效int值,但没有在任何地方分配它,从而导致丢失。您需要创建一个新的整数数组,然后通过循环将每个值添加到其中,如下所示:

int[] integerRates = new int[6];
while(index<rates.Length)
        {
            integerRates[index] = decimal.ToInt32(rates[index]);
            index++;
        }
highestRate = Highest(integerRates); 
lowestRate = Lowest(integerRates);
averageRate = Average(integerRates); 

或更改其他函数的输入参数以代替接受decimal数组(根据Masoomian的回答),这也将使您的while循环多余。这可能是处理它的更好方法,因为您不会损失小数位数的准确性。

最好的解决方案是按照TheGeneral建议使用Linq。尽管我怀疑这是针对学校项目的,但他们可能想教循环和if语句。