【问题标题】:C# sum of intergers in array using foreachC# 使用 foreach 对数组中的整数求和
【发布时间】:2015-05-02 11:47:15
【问题描述】:

请帮忙。被此代码卡住尝试了不同的方法,但无法使其正常工作。我有一个“foreach”循环,从技术上讲,它必须对 2D 数组中的所有整数求和,但是,计算出的答案不是预期的。我究竟做错了什么?谢谢谢谢。

    static void Main(string[] args)
    {

        const int ROWS = 2;
        const int COLS = 2;
        const int MAX = 5;

        string input;
        int[,] numbers = new int[ROWS, COLS];


        do
        {
            int total = 0;
            double avg = 0;
            Random rand = new Random();
            for (int rows = 0; rows < ROWS; ++rows)
            {
                for (int cols = 0; cols < COLS; ++cols)
                {
                    numbers[rows, cols] = rand.Next(1, MAX);
                }
                {
                    for (int cols = 0; cols < COLS; ++cols)
                        Console.Write(" {0, 3}", numbers[rows, cols]);
                    Console.WriteLine();
                }

    foreach (int cell in numbers)
                {
                    total += cell;
                } 

                avg = total / 4.0;

            } Console.WriteLine("Sum: {0:0,0}   Average: {1:f}", total, avg);

            Console.Write("\nWould you like to generate a new table? Type yes or no... ");
            input = Console.ReadLine().ToLower();

            if (input == "no")
            {
                Console.WriteLine("End of program. Press any key to exit. Goodbye.");
            }
        }

        while (input == "yes");






        Console.ReadKey();

【问题讨论】:

    标签: c loops multidimensional-array foreach sum


    【解决方案1】:

    我认为你的 foreach 在这里是多余的:

    for (int rows = 0; rows < ROWS; ++rows)
    {
        for (int cols = 0; cols < COLS; ++cols)
        {
            numbers[rows, cols] = rand.Next(1, MAX);
            total += numbers[rows, cols]; // Sum in the same loop
        }
    
        for (int cols = 0; cols < COLS; ++cols)
            Console.Write(" {0, 3}", numbers[rows, cols]);
        Console.WriteLine();
    
        avg = total / 4.0;
    
    }
    

    【讨论】:

      【解决方案2】:

      我同意@QtRoS 的观点,即您的周期是多余的 - 您将所有单元格的值加了两次(对于每一行)。

      但我认为代码中还有一个错误(在@QtRoS 的回答中也是如此)。 如果要计算所有网格单元格的平均值,则必须在对行进行循环后执行此操作。

      这边:

      for (int rows = 0; rows < ROWS; ++rows)
      {
          for (int cols = 0; cols < COLS; ++cols)
          {
              numbers[rows, cols] = rand.Next(1, MAX);
              total += numbers[rows, cols]; // Sum in the same loop
          }
      
          for (int cols = 0; cols < COLS; ++cols)
              Console.Write(" {0, 3}", numbers[rows, cols]);
          Console.WriteLine();
      }
      
      avg = total / 4.0;
      

      【讨论】:

        【解决方案3】:

        所以我发现了逻辑错误。我将“foreach”循环移到“for”循环之外,它修复了一个错误。感谢您的时间和支持。这是工作代码: 静态无效主要(字符串 [] 参数) {

                const int ROWS = 2;
                const int COLS = 2;
                const int MAX = 5;
        
                string input;
                int[,] numbers = new int[ROWS, COLS];
        
        
                do
                {
                    int total = 0;
                    double avg = 0;
                    Random rand = new Random();
                    for (int rows = 0; rows < ROWS; ++rows)
                    {
                        for (int cols = 0; cols < COLS; ++cols)
                        {
                            numbers[rows, cols] = rand.Next(1, MAX);
                        }
                        {
                            for (int cols = 0; cols < COLS; ++cols)
                                Console.Write(" {0, 3}", numbers[rows, cols]);
                            Console.WriteLine();
                        }
        
                    } 
        
        
                        foreach (int cell in numbers)
                        {
                            total += cell;
                        }
        
                        avg = total / 4.0;
                    Console.WriteLine("Sum: {0:0,0}   Average: {1:f}", total, avg);
        
                    Console.Write("\nWould you like to generate a new table? Type yes or no... ");
                    input = Console.ReadLine().ToLower();
        
                    if (input == "no")
                    {
                        Console.WriteLine("End of program. Press any key to exit. Goodbye.");
                    }
                }
        
                while (input == "yes");
        
        
        
        
        
        
                Console.ReadKey();
            }
        }
        

        }

        【讨论】:

          猜你喜欢
          • 2017-10-24
          • 2011-01-26
          • 1970-01-01
          • 2011-04-10
          • 2016-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-08
          相关资源
          最近更新 更多