2017-01-11 1 views
1

내가 원하는 것은 사용자가 입력 한 각 행의 평균을 구하는 것입니다. 입력을 표시 할 수 있지만 각 행의 세 숫자의 평균을 계산하는 방법을 모르겠습니다. 해결책은 무엇입니까? C#을 처음 접했으므로 여전히 배우기 쉽습니다. 여기 다차원 배열의 각 행의 평균을 계산하는 방법

내 코드입니다 :

class Program 
    { 
     static void Main(string[] args) 
     { 
      int[,] number = new int[3, 5]; 
      for (int i = 0; i < 3; i++) 
      { 
       for (int x = 0; x < 3; x++) 
       { 
        Console.WriteLine("Please enter number"); 
        number[x, i] = int.Parse(Console.ReadLine()); 
       } 
      } 

      for (int i = 0; i < 3; i++) 
      { 
       for (int x = 0; x < 3; x++) 
       { 
        Console.Write(number[x, i] + " "); 
       } 
       Console.WriteLine(" "); 
       Console.ReadLine(); 
      } 
     } 
    } 

답변

0

당신은 그것을 당신이 다음과 같은 방법을 만들어야 할 생각이

for(int i = 0; i < 3; i++) 
{ 
    int Avg = 0; 
    for(int x = 0; x < 3; x++) 
    { 
     Console.Write(number[x, i] + " "); 
     Avg += number[x, i]; 
    } 
    Avg = Avg/3; 
    Console.Write("Average is" + Avg); 
    Console.WriteLine(" "); 
    Console.ReadLine(); 
} 
+0

이렇게하면 출력물을 만들 수 있습니다. 감사합니다. 정수 대신 십진수를 사용하려면 어떻게해야합니까? Double은 사용할 올바른 데이터 유형입니까? 그리고 나는 그것에 대해 어떻게 갈 것인가? – Rengaw

+0

십진수 란 뜻입니까? 숫자의 범위는 무엇입니까? – Gilad

+0

제가 생각하기에 : 다차원 배열을 반복 할 때 먼저 행을 반복하고 각 행의 열을 통과해야합니다. 역순으로이 작업을 수행하고 있습니다. –

1

과 같은 작업을 수행 할 수 있습니다, 그 입력으로 두 차원 배열을 받아 들일 것입니다 행을 반복하고 반복을 통해 각 행의 모든 ​​요소의 합계를 찾기 위해 해당 열을 통해 수행 한 다음 열 수와 함께 평균을 구합니다. 당신이 다차원 배열 값을 읽을 때, 열을 읽기 위해 행과 내부 루프의 값을 읽어 외부 루프를 사용하는 방법

public static void rowWiseAvg(int[,] inputArray) 
{ 
    int rows = inputArray.GetLength(0); 
    int cols = inputArray.GetLength(1); 

    for (int i = 0; i < rows; i++) 
    { 
     float rowAvg = 0; 
     for (int x = 0; x < cols; x++) 
     {     
      rowAvg += inputArray[i,x]; 
     } 
     rowAvg = rowAvg/cols; 
     Console.Write("Average of row {0} is :{1}", i,rowAvg);   
    } 
} 

당신을위한 추가 참고로 살펴 보자. 귀하의 경우 실제로 열을 먼저 읽은 다음 열의 각 행에 대한 값을 가져옵니다. 평균

0

를 저장하는 이중 하나 더 사용 float는/여기에 (대부분) LINQ 솔루션입니다 :

var array = new int[,] 
{ 
    { 1, 2, 3, 4 }, 
    { 5, 6, 7, 8 }, 
    { 9, 10, 11, 12 } 
}; 

int count = 0; 
var averages = array.Cast<int>() 
        .GroupBy(x => count++/array.GetLength(1)) 
        .Select(g => g.Average()) 
        .ToArray(); 

// [2.5, 6.5, 10.5] 
0

가장 간단한 방법은 다른 답변에 설명 된대로 for 루프를 사용하는 것입니다.
또한 LINQ를 활용하고 그것을 다른 방법을 만들기 위해 Enumerable.Range를 사용할 수 있습니다

public static class MultidimensionalIntArrayExtensions 
{ 
    // Approach 1 (using Select and Average) 
    public static double[] RowAverages(this int[,] arr) 
    { 
     int rows = arr.GetLength(0); 
     int cols = arr.GetLength(1); 

     return Enumerable.Range(0, rows) 
      .Select(row => Enumerable 
       .Range(0, cols) 
       .Select(col => arr[row, col]) 
       .Average()) 
      .ToArray(); 
    } 

    // Approach 2 (using Aggregate) 
    public static double[] RowAverages(this int[,] arr) 
    { 
     int rows = arr.GetLength(0); 
     int cols = arr.GetLength(1); 

     return Enumerable.Range(0, rows) 
      .Select(row => Enumerable 
       .Range(0, cols) 
       .Aggregate(0.0, (avg, col) => avg + ((double)arr[row, col]/cols))) 
      .ToArray(); 
    } 
} 

// Usage: 
int[,] arr = 
{ 
    { 1, 2, 3 }, 
    { 2, 3, 4 }, 
    { 3, 4, 5 }, 
    { 6, 7, 8 }, 
    { 1, 1, 1 } 
}; 

double[] rowSums = arr.RowAverages(); // [2, 3, 4, 7, 1.3333] 
이 코드는 일부 개발자를위한 읽을 수 및 비 OOP를 보일 수 있습니다

; 다른 사람들에게 좋고 간결하게 보일 수 있습니다. 두 번째 그룹에 속하면이 코드를 사용하십시오.

+0

질문에 합계가 필요하지 않습니다. 평균을 요구하고 있습니다. – Abion47

+0

@ Abion47 고마워요! 나는 나의 대답을 업데이트했다. –

관련 문제