Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算平均等级,不包括输入的最低和最高值_C#_Exception_Average - Fatal编程技术网

C# 计算平均等级,不包括输入的最低和最高值

C# 计算平均等级,不包括输入的最低和最高值,c#,exception,average,C#,Exception,Average,任务是允许用户输入介于0和100之间的值。如果用户输入-99,程序应该停止。一旦程序退出,必须计算平均值。但是,平均值应包括所有输入值,但输入的最低值(最小值)和输入的最大值(最大值)除外。我已经编写了一个相当好看的代码,但是它抛出了一个索引自动失效异常 这是代码: class Program { static void Main(string[] args) { DisplayApp(); Calculate(); } sta

任务是允许用户输入介于0和100之间的值。如果用户输入-99,程序应该停止。一旦程序退出,必须计算平均值。但是,平均值应包括所有输入值,但输入的最低值(最小值)和输入的最大值(最大值)除外。我已经编写了一个相当好看的代码,但是它抛出了一个
索引自动失效异常

这是代码:

class Program
{
    static void Main(string[] args)
    {
        DisplayApp();

        Calculate();
    }

    static void DisplayApp()
    {
        Console.WriteLine("Grade Calculator: ");

        Console.WriteLine();
    }

    static double Calculate()
    {
        Console.WriteLine("Enter grades (-99 to exit): ");
        string input = Console.ReadLine();

        int[] array1 = new int[] { };

        int iInput = int.Parse(input);

        int min = 100;
        int max = 0;

        int i = 0;

        int sum = 0;
        double average = 0;

        while(iInput != 99)
        {
            if(iInput < min)
            {
                array1[i] = min;
            }
            else if(iInput > max)
            {
                array1[i] = max;
            }

            sum += iInput - (min + max);

            i++;
        }

        average = (double)sum / i;

        return average;
    }
}
类程序
{
静态void Main(字符串[]参数)
{
DisplayApp();
计算();
}
静态void DisplayApp()
{
控制台。WriteLine(“等级计算器”);
Console.WriteLine();
}
静态双重计算()
{
Console.WriteLine(“输入等级(-99)以退出):”;
字符串输入=Console.ReadLine();
int[]数组1=新的int[]{};
int iInput=int.Parse(输入);
int最小值=100;
int max=0;
int i=0;
整数和=0;
双平均=0;
而(输入!=99)
{
如果(输入<最小值)
{
阵列1[i]=最小值;
}
否则如果(输入>最大值)
{
阵列1[i]=最大值;
}
总和+=输入-(最小值+最大值);
i++;
}
平均值=(双)和/i;
收益率平均值;
}
}

您认为为了使该计划发挥作用,可以改进哪些方面

正如我在评论中提到的,您创建了一个大小为零的数组。我完全不明白为什么需要数组,因为您只是对值求和:

static double Calculate()
{
    Console.WriteLine("Enter grades (-99 to exit): ");

    int min = Int32.MaxValue;
    int max = Int32.MinValue;

    int sum = 0;
    int i = 0;

    while (true)
    {
        // TODO: Change to TryParse and handle input errors.
        int iInput = int.Parse(Console.ReadLine());
        if (iInput == -99) break;

        if (iInput > 0 && iInput < 100) {
            if (iInput < min)
            {
                min = iInput;
            }
            if (iInput > max)
            {
                max = iInput;
            }
            sum += iInput;
            i += 1;
        }
    }

    // TODO: Ensure no division by zero
    return (double)(sum - max - min) / (i - 2);
}
静态双重计算()
{
Console.WriteLine(“输入等级(-99)以退出):”;
int min=Int32.MaxValue;
int max=Int32.MinValue;
整数和=0;
int i=0;
while(true)
{
//TODO:更改为TryParse并处理输入错误。
int iInput=int.Parse(Console.ReadLine());
如果(iInput==-99)中断;
如果(输入大于0&&I输入小于100){
如果(输入<最小值)
{
最小=输入;
}
如果(输入>最大值)
{
最大=输入;
}
总和+=输入;
i+=1;
}
}
//TODO:确保不被零除
回报(双倍)(总和-最大值-最小值)/(i-2);
}

int[]array1=新的int[]{}创建大小为零的空数组。创建时需要知道数组大小。对于动态数据,您可以使用
列表
,而(iInput!=99)
应该是
-99
,不是吗。。。同样,虽然循环中应该有
ReadLine
。@Rahul否,它被设置为
MinValue
,因此用户输入的任何值都将大于(或等于)它,并且
max
将被设置。@zaimoff我忘记移动
控制台。ReadLine()
。修正。仍然不起作用,谢谢你的帮助。你能解释一下“不起作用”吗?对我来说测试正常:它起作用了,很抱歉。我弄乱了一行代码。