2015-03-02 324 views
0

请帮忙。被这个代码困住了,尝试了不同的东西,但无法使它正常工作。我有一个“foreach”循环,在技术上它必须将二维数组中的所有整数相加,然而,计算出的答案并不是预期的结果。我究竟做错了什么?谢谢谢谢。C#数组中使用foreach的整数求和

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(); 

回答

0

我认为你的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; 

} 
0

我同意@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; 
1

所以我找到了逻辑错误。我将“foreach”循环移到了“for”循环之外,并修复了一个错误。感谢您的时间和支持。这里的工作代码: 静态无效的主要(字串[] 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(); 
    } 
} 

}