C# 计算平均等级,不包括输入的最低和最高值
任务是允许用户输入介于0和100之间的值。如果用户输入-99,程序应该停止。一旦程序退出,必须计算平均值。但是,平均值应包括所有输入值,但输入的最低值(最小值)和输入的最大值(最大值)除外。我已经编写了一个相当好看的代码,但是它抛出了一个C# 计算平均等级,不包括输入的最低和最高值,c#,exception,average,C#,Exception,Average,任务是允许用户输入介于0和100之间的值。如果用户输入-99,程序应该停止。一旦程序退出,必须计算平均值。但是,平均值应包括所有输入值,但输入的最低值(最小值)和输入的最大值(最大值)除外。我已经编写了一个相当好看的代码,但是它抛出了一个索引自动失效异常 这是代码: class Program { static void Main(string[] args) { DisplayApp(); Calculate(); } sta
索引自动失效异常
这是代码:
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()
。修正。仍然不起作用,谢谢你的帮助。你能解释一下“不起作用”吗?对我来说测试正常:它起作用了,很抱歉。我弄乱了一行代码。