所以,我在数组中输入双值,然后建立总和(没有最大值和最小值),平均值,最大值和最小值。一切都很好,但是min永远是0,我不知道该怎么做;
注意:不使用Max()
和Min()
方法
static void Main(string[] args)
{
double avr = 0;
double sum = 0;
double max;
double min;
Console.WriteLine("how many numbers?");
int b = Convert.ToInt32(Console.ReadLine());
double[] arr = new double[b];
max = arr[0];
min = arr[0];
for (int i = 0; i < b; i++)
{
arr[i] = Convert.ToDouble(Console.ReadLine());
if (arr[i] >= max)
{
max = arr[i];
}
else if (arr[i] <= min)
{
min = arr[i];
}
sum += arr[i];
}
sum = sum - max - min;
avr = sum / (b - 2);
Console.WriteLine("sum = {0},average = {1}, max = {2}, min = {3}", sum, avr, max, min);
Console.ReadKey();
}
答案 0 :(得分:3)
您使用默认值double
初始化min
和max
- 因此在任何迭代之前都将设置为0。因此,如果所有元素都大于零min
- 当所有元素都小于零时,max
将无法正常工作。
修复
double.MinValue
/ double.MaxValue
用于相应的最小值/最大值,以便任何实际值都满足if
条件
max = double.MinValue;
arr[0]
实际上包含有效的用户提供的值而不是默认值。答案 1 :(得分:2)
初始化最大值和最小值时,将其设置为arr[0]
,这将为0.这意味着你的min已准备好处于非常低的值。
执行double.MinVale
和double.MaxValue
来初始化最大和最小变量。
答案 2 :(得分:1)
此代码执行您尝试实现的目标。我删除了数组,因为它没有任何功能。有两个问题(也见代码中的注释):
1)else if
语句:一个值可以同时是最小值和最大值,当输入的数字总是高于前一个时,将永远不会达到else。
2)初始最小值应该是最大可能值。
static void Main(string[] args)
{
double avr = 0;
double sum = 0;
double max = 0;
double min = Double.MaxValue; // *** Initially set to maximum possible number ***
Console.WriteLine("How many numbers?");
int b = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < b; i++)
{
double number = Convert.ToDouble(Console.ReadLine());
if (number >= max)
{
max = number;
}
if (number <= min) // *** The else is removed here ***
{
min = number;
}
sum += number;
}
sum = sum - max - min; // Exclude lowest and hightest value
avr = sum / (b - 2); // Average excluding lowest and highest value
Console.WriteLine("sum = {0}, average = {1}, max = {2}, min = {3}", sum, avr, max, min);
Console.ReadKey();
}