我正在尝试制作一个程序,该程序不断向用户询问一个数字,直到他们输入 -1,然后计算平均值

问题描述

我的代码的问题是将用户输入的 -1 添加到总和中。我想我错过了一些非常简单的东西。 这是我的代码

        double sum =0 ;
        double average=0  ;
        double total=0 ;

        


        double input;
        Console.WriteLine("What is your next number? (Type -1 to exit) ");
        Double.TryParse(Console.ReadLine(),out input);
        totaL++;
        sum += input;
        while (input != -1)
        {
           
            Console.WriteLine("What is your next number? (Type -1 to exit) ");
            Double.TryParse(Console.ReadLine(),out input);
            totaL++;
            sum += input;
                
            
        }
        if(input == -1)
        {
            average = (double)sum / total;
            Console.WriteLine("The average of your numbers is: {0}",average);
        }

解决方法

实际问题是您在平均值中包含了 -1,您可以通过在进行任何数据操作之前检查 -1 来解决此问题

示例

if (input == -1)
   break;

total++;
sum += input;

List<T> 可能是这里最合适的数据结构。您还可以访问 Average 并根据需要对输入进行进一步分析。

计算一系列数值的平均值。

示例

var list = new List<double>();

while (true)
{
   Console.Write("What is your next number? (Type -1 to exit) : ");
   double input = 0;
   while (!double.TryParse(Console.ReadLine(),out input))
      Console.WriteLine("You had one job. What is your next number? (Type -1 to exit) ");

   if (input == -1)
      break;

   list.Add(input);
}

Console.WriteLine("The average of your numbers is: {0}",list.Average());
Console.WriteLine("Max: {0}",list.Max());
Console.WriteLine("Min: {0}",list.Min());
Console.WriteLine("Total: {0}",list.Sum());
Console.WriteLine("Count: {0}",list.Count());

输出

What is your next number? (Type -1 to exit) : 1
What is your next number? (Type -1 to exit) : 2
What is your next number? (Type -1 to exit) : 3
What is your next number? (Type -1 to exit) : 4
What is your next number? (Type -1 to exit) : -1
The average of your numbers is: 2.5
Max: 4
Min: 1
Total: 10
Count: 4
,

这里的问题 - 已经被指出 - 是在 while-loop 之前和之内没有检查用户是否确实输入了 -1。

因此,当程序启动时 - 如果用户输入 -1,程序实际上会将 -1 添加到您的逻辑中,跳过循环,提示然后退出。

在您的循环中 - 如果用户输入 -1,程序会将 -1 添加到您的逻辑中,然后退出循环,提示然后退出。

在这两种情况下 -1 都将被计算在内。

在不偏离您的实施的情况下,我们可以执行以下操作:

            double sum = 0;
            double average = 0;
            double total = 0;
            double input;

            Console.WriteLine("What is your next number? (Type -1 to exit) ");
            Double.TryParse(Console.ReadLine(),out input);
            
            // first check before entering the loop
            if (input != -1)
            {
                total++;
                sum += input;
            }

            while (input != -1)
            {
                Console.WriteLine("What is your next number? (Type -1 to exit) ");
                Double.TryParse(Console.ReadLine(),out input);

                // second check exit early 
                if (input == -1)
                {
                    break;
                }

                total++;
                sum += input;
            }

            if (input == -1)
            {
                average = (double)sum / total;
                Console.WriteLine("The average of your numbers is: {0}",average);
            }

话虽如此 - 我建议您将 @00110001 解决方案视为一种潜在的实现。