【问题标题】:Which loop I should use to get the correct result in below C# program我应该使用哪个循环在下面的 C# 程序中获得正确的结果
【发布时间】:2016-12-09 21:15:10
【问题描述】:

在下面的程序中,我知道发生了什么,但不知道应该使用哪个循环。这是代码。您的帮助将不胜感激。

如果您需要更多信息来理解我的问题,请告诉我。

using System;

// Write a C# program that takes x numbers as input to calculate and print the average. 
class Program9
{
    int input, i = 1, val, sum;

    decimal avg;

    public void program9M()
    {
        Console.Write("How many number(s) you have for an average: ");
        input = Convert.ToInt32(Console.ReadLine());

        if (input >= 2)
        {
            do
            {
                Console.Write("Enter number {0} for an average: ", i);
                val = Convert.ToInt32(Console.ReadLine());
                sum = sum + val;
                i += 1;
            } while (i <= input);

            avg = (decimal)sum / i;
            Console.WriteLine("The average of above {0} number is: {1}", i, avg);
        }
        else
        {
            Console.WriteLine("\n\nSorry you can't find average for one number, at least 2 number required\n\n");
        }

        Console.Write("Press any key to continue further...");
        Console.ReadKey();
    }

    public static void Main()
    {
        Program9 p9 = new Program9();
        p9.program9M();
    }
}

输入:

How many number(s) you have for an average: 3

Enter number 1 for an average: 5

Enter number 2 for an average: 10

Enter number 3 for an average: 15

当前输出:

The average of above **4** number is: **7.5**

预期输出:

The average of above **3** number is: **10**

【问题讨论】:

  • i = 0 而不是 1 ?
  • 伙计,我们不是实时调试器,请开始使用您的调试功能并检查您的问题。如果您有确切的问题,请询问。
  • 嘿伙计,你是对的!!!,非常感谢。
  • 您应该尝试添加断点并对其进行调试以了解更多信息,您可以查看顶部的文档部分以获取教程,您将受益更多。
  • 请尝试添加一些细节。您可以添加的内容(假设您还没有)包括:您已经尝试过的内容和有效/无效的内容、少量代码或错误消息以及任何其他可能有助于某人回答您的问题的信息。请通过编辑您的原始问题并添加详细信息来做到这一点!谢谢!

标签: c# loops average


【解决方案1】:

您可以彻底清理该代码。

int index = 0, input, averageInput;
var collection = new List<int>();
if(int.TryParse(Console.ReadLine(), out input) && input >= 2)
{
     while(index <= input)
     {
          if(int.TryParse(Console.ReadLine(), out averageInput)
             collection.Add(averageInput);

          index++;
     }

     var sum = collection.Sum();
     var average = collection.Average();
}

您需要错误处理。但是,您可以使用 Linq,而不是自己进行计算。这将使它更具表现力。另外,如果您自己做,则不需要:sum = sum + average,您可以简单地做:sum += average,它会不断添加。

您还可以使用++-- 自动递增和递减。所以,你不需要i += 1,你可以简单地做i++

您还应该从零开始循环,因为集合将从零开始,而不是从一开始。因此,如果您的数组有五个,并且您从一个开始,您将只能获得其中四个值。由于数组初始化为零。

【讨论】:

    【解决方案2】:

    问题在于do 循环的工作原理。

    更改 int input, i = 0, val, sum; 并将您的 i 增量移到顶部。此外,由于我们从 0 开始,因此 i 的比较小于输入。

    class Program9
    
    {
    
        int input, i = 0, val, sum;
    
        decimal avg;
    
        public void program9M()
    
        {
    
            Console.Write("How many number(s) you have for an average: ");
            input = Convert.ToInt32(Console.ReadLine());
            if (input >= 2)
            {
                do
                {
                    i += 1;
                    Console.Write("Enter number {0} for an average: ", i);
                    val = Convert.ToInt32(Console.ReadLine());
                    sum = sum + val;
    
                } while (i < input);
                avg = (decimal)sum / i;
                Console.WriteLine("The average of above {0} number is: {1}", i, avg);
            }
    
            else
            {
                Console.WriteLine("\n\nSorry you can't find average for one number, at least 2 number required\n\n");
    
            }
            Console.Write("Press any key to continue further...");
            Console.ReadKey();
        }
    
        public static void Main()
    
        {
            Program9 p9 = new Program9();
            p9.program9M();
        }
    
    }
    

    }

    【讨论】:

      【解决方案3】:

      最好使用的循环是“for”循环,但它也可以工作。 你这样做的错误是'i'在开始时应该是0,而应该是'(i

      int i = 0;
      do
      {
          Console.Write("Enter number {0} for an average: ", i);
          val = Convert.ToInt32(Console.ReadLine());
          sum = sum + val;
          i += 1;
      } while (i < input);
      
      avg = (decimal)sum / input;
      Console.WriteLine("The average of above {0} number is: {1}", input, avg);
      

      在这种情况下更常见的“for”循环是:

      for (int i = 0; i < input; i++)
      {
          Console.Write("Enter number {0} for an average: ", i);
          val = Convert.ToInt32(Console.ReadLine());
          sum = sum + val;
      }
      
      avg = (decimal)sum / input;
      Console.WriteLine("The average of above {0} number is: {1}", input, avg);
      

      除以“i”也没有意义,因为“输入”总是数字的数量。

      【讨论】:

        猜你喜欢
        • 2016-06-14
        • 2021-09-02
        • 2018-11-28
        • 2014-09-07
        • 2015-08-16
        • 2021-04-30
        • 2019-10-05
        • 2021-07-16
        • 1970-01-01
        相关资源
        最近更新 更多