6

如何创建排除最低温度并计算平均温度的方法。我只想要一个提示而不是完整的解决方案,因为我想自己解决我的编程问题。我只有大约 10 节课.. 评论我的教授不讲课的人的评论,我读过我的书多次回顾。

我制作了这个程序来从用户那里获取一个号码。该数字被添加到数组中。该数组用于创建类的实例Temp以打印最低和最高温度。

class Program
{
    static void Main(string[] args)
    {
        Console.Write("Enter a Temperature in Degrees:");
        string n = Console.ReadLine();
        int number = Convert.ToInt32( n); 
        Temp t = new Temp(100, 52, 98, 30, 11, 54, number);
        Console.WriteLine("Lowest Temperature:{0}", t.lowest());
        Console.WriteLine("Highest Temperature: {0}", t.highest());
        Console.WriteLine("Average Temperature: {0}", t.Average());
    }

    public class Temp
    {
        private int[] temp = new int[7]; // array 
        public Temp(int d1, int d2, int d3, int d4, int d5, int d6, int d7) // constructor with 7 parameters
        {
            temp[0] = d1; // assigning constructor parameters to array
            temp[1] = d2;
            temp[2] = d3;
            temp[3] = d4;
            temp[4] = d5;
            temp[5] = d6;
            temp[6] = d7;
        }

        public int lowest() // returning the lowest value of the set of numbers
        {
            int smallest = 150;
            for (int c = 0; c < 7; c++)
            {
                if (temp[c] < smallest)
                {
                    smallest = temp[c];
                }

            }
            return smallest;
        }

        public int highest()
        {
            int highest = -1;
            for (int c = 0; c < 7; c++)
            {
                if (temp[c] > highest)
                {
                    highest = temp[c];
                }
            }

            return highest;
        }

        public double Average()
        {
            double average = 0;
            for (int c = 0; c < 7; c++)
            {

            }
            return average;
        }
    }
}
4

5 回答 5

8

使用单个循环很容易做到这一点:

public double Average()
{
    // Initialize smallest with the first value.
    // The loop will find the *real* smallest value.
    int smallest = temp[0];

    // To calculate the average, we need to find the sum of all our temperatures,
    // except the smallest.
    int sum = temp[0];

    // The loop does two things:
    // 1. Adds all of the values.
    // 2. Determines the smallest value.
    for (int c = 1; c < temp.Length; ++c)
    {
        if (temp[c] < smallest)
        {
            smallest = temp[c];    
        }
        sum += temp[c];
    }
    // The computed sum includes all of the values.
    // Subtract the smallest.
    sum -= smallest;

    double avg = 0;
    // and divide by (Length - 1)
    // The check here makes sure that we don't divide by 0!
    if (temp.Length > 1)
    {
        avg = (double)sum/(temp.Length-1);
    }
   return avg;
}
于 2013-07-10T22:06:41.480 回答
2

这里的版本与 Douglas 发布的版本略有不同(当然,他的版本非常好,描述得很好,我只是把它放给你看)。它不使用最低()方法调用。

public double Average()
{
    double sum = temp[0]; // sum of temperatures, starting from value of first one in array
    double lowest = temp[0]; // buffer for lowest temperature value
    for (int c = 1; c < 7; c++) // start loop from second position in array
    {
        if (temp[c] < lowest) // checking if next value in array is smaller than the lowest one so far...
        {
            lowest = temp[c]; // ...if so, value of variable lowest is changing
        }
        sum = sum + temp[c]; // adding temparatures value to variable sum, one by one
    }
    sum = sum - lowest; // at the end we substract lowest value from sum of all temperatures
    double average = sum / 6; // average value calculation
    return average;
}

编辑:吉姆米歇尔是第一个;-)。由于使用了 temp.Length,而不是静态数字(在本例中为 7),他的版本也更加灵活。

于 2013-07-10T22:22:43.263 回答
1

您需要添加错误处理,但这可以帮助您开始

var ints = new List<int>();
var newInts = ints.OrderBy(x => x).ToList();
newInts.RemoveAt(0);
var avg = newInts.Average();
于 2013-07-10T19:53:28.633 回答
0
    public double Average()
    {
         var tempsToUse = temp.OrderByDescending(t => t).Take(temp.Length - 1);

         return tempsToUse.Average();
    }

编辑以包括完整的功能签名。

于 2013-07-10T20:00:37.950 回答
0

您可以使用一些 LINQ 函数轻松完成此操作。有很多其他方法可以做到这一点,但它们都是相似的。如果有超过一个最小值,您的平均值将不包括其中任何一个。

int min = myArray.Min(); // get the min element
var withoutMin = myArray.Where(x => x != min); // get a new list without the min element
double mean = withoutMin.Average(); // take the sum and divide it by the count 
于 2013-07-10T19:54:18.407 回答