C#——完善例6-4的泛型类Data,扩展并实现以下功能:针对任意个字符型、整型、浮点型或双精度型数据能进行排序和汇总,也能求出最大数、中位数、最小数和平均值。

例6-4,设计一个泛型类,实现任意类型的数据排序

8.完善例6-4的泛型类Data,扩展并实现以下功能:针对任意个字符型、整型、浮点型或双精度型数据能进行排序和汇总,也能求出最大数、中位数、最小数和平均值。

设计界面:一个Label标签

编写代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 泛型类
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "";
            Data a = new Data (3, 5, 2, 8, 7, 6 );  //1整型(排序、汇总、最大数、中位数、最小数 、平均值)
            a.sort();
            label1.Text = "(一)整型:\n\n排序:" + a.display() + "\n汇总:" + a.getSum()+" \n最大值:"
                +a.getMax()+"\n最小值:"+a.getMin()+"\n平均值:"+a.getAvg()+"\n中位数:"+a.getCenter();
            Data b = new Data(3.5f, 7.5f, 2.1f, 9.9f, 5.4f, 6.8f);//2浮点型
            b.sort();
            label1.Text += "\n\n\n(二)浮点型:\n\n排序:" + b.display() + "\n汇总:" + b.getSum() + " \n最大值:" + b.getMax()
                + "\n最小值:" + b.getMin() + "\n平均值:" + b.getAvg() + "\n中位数:" + b.getCenter();
            Data c = new Data(3.53, 3.5, 4.1, 3.9, 5.4, 3.8);//3双精度型
            c.sort();
            label1.Text += "\n\n\n(三)双精度型:\n\n排序:" + c.display() + "\n汇总:" + c.getSum() + " \n最大值:" + c.getMax()
                + "\n最小值:" + c.getMin() + "\n平均值:" + c.getAvg() + "\n中位数:" + c.getCenter();
            Data d = new Data("3", "7.5"," 2.9", "7.9"," 4"," 6.8"); //4字符型
            d.sort();
            label1.Text += "\n\n\n(四)字符型:\n\n排序:" + d.display() + "\n汇总:" + d.getSum() + " \n最大值:" + d.getMax()
                + "\n最小值:" + d.getMin() + "\n平均值:" + d.getAvg() + "\n中位数:" + d.getCenter();
        }
    }
    //定义泛型类
    class Data
    {
        private T[] datas;
        public Data(params T[] datas)
        {
            this.datas = datas;
        }
        //排序
        public void sort()
        {
            for (int i = 0; i < datas.Length; i++)
            {
                for (int j = i; j < datas.Length; j++)
                { 
                    if(Convert .ToDouble(datas[i])                     {
                        T t = datas[i];
                        datas[i] = datas[j];
                        datas[j] = t;
                    }
                }
            }
        }

        //输出数组元素的方法
        public string display() 
        {
            string info = "";
            for (int i = 0; i < datas.Length; i++)
            {
                info += datas[i].ToString() + "    ";
            }
            return info;
        }

        //汇总
        public double getSum()
        {
            double s = 0;
            for (int i = 0; i < datas.Length;i++ )
            {
                s +=Convert .ToDouble( datas[i]);
            }
            return s;
        }

        //平均值
        public double getAvg()
        {
            double s = 0;
            for (int i = 0; i < datas.Length; i++)
            {
                s += Convert.ToDouble(datas[i]);
            }
            return s/datas .Length ;
        }

        //最大数
        public double getMax()
        {
            return Convert .ToDouble ( datas[0]);
        }

        //最小数
        public double getMin()
        {
            return Convert.ToDouble(datas[datas .Length -1]);
        }
        //中位数
        public double getCenter()
        {
            int n = datas.Length;
            if (n % 2 != 0)  //如果为奇数个,则返回中间的数(因为数组已经排序好)
            {
                int i = (datas.Length - 1) / 2;
                return Convert.ToDouble(datas[i]);
            }
            else  //如果为偶数个,则返回中间两位数的平均值
            { 
                int i=datas.Length /2;
                double x= Convert.ToDouble(datas[i-1]);
                double y= Convert.ToDouble(datas[i]);
                return (x+y)/2;
            }
        }

    }

}

运行结果:

C#——完善例6-4的泛型类Data<T>,扩展并实现以下功能:针对任意个字符型、整型、浮点型或双精度型数据能进行排序和汇总,也能求出最大数、中位数、最小数和平均值。_第1张图片

你可能感兴趣的:(C#,泛型类,最大值,中位数)