2016-10-04 2 views
-4

그래서 배열에 double 값을 입력하고 최대 합계와 최소값없이 합계를 구하고 평균, 최대 및 최소를 입력합니다. 모든 것은 괜찮습니다.하지만 분은 영구적으로 0이며, 무엇을해야할지 모르겠습니다.배열 C의 최대 및 최소 #

참고 : Max()Min() 방법

static void Main(string[] args) 
{ 
    double avr = 0; 
    double sum = 0; 
    double max; 
    double min; 
    Console.WriteLine("how many numbers?"); 
    int b = Convert.ToInt32(Console.ReadLine()); 
    double[] arr = new double[b]; 
    max = arr[0]; 
    min = arr[0]; 
    for (int i = 0; i < b; i++) 
    { 
     arr[i] = Convert.ToDouble(Console.ReadLine()); 
     if (arr[i] >= max) 
     { 
      max = arr[i]; 
     } 

     else if (arr[i] <= min) 
     { 
      min = arr[i]; 
     } 
     sum += arr[i]; 
    } 

    sum = sum - max - min; 
    avr = sum/(b - 2); 

    Console.WriteLine("sum = {0},average = {1}, max = {2}, min = {3}", sum, avr, max, min); 
    Console.ReadKey(); 
} 
+0

모든 doubles를 '0d 또는 0.0'으로 초기화하십시오. – MethodMan

+1

max = double.minvalue; min = double.maxvalue; – Fredou

+0

그렇다면 'else if (arr [i] <= min)'단순히'if (arr [i] <= min)' –

답변

3

당신은 minmax 초기화 double의 기본값을 사용 사용하지 않음 - 그래서 모두 전에 0으로 모든 반복을 설정됩니다. 0보다 큰 모든 요소가 0보다 작은 경우 max - 모든 요소가 0보다 작은 경우 min이 잘못 작동합니다. arr[0] 실제로 유효한 포함하여 이상 - 분 대응하는

수정

  • 사용 double.MinValue/double.MaxValue/최대이므로 실제 값이 아직 max = double.MinValue;
  • 나은 조건 배열 컴퓨팅 통계 분할 판독 if 만족 기본값 대신 사용자가 제공 한 값.
+0

에 2 번째 픽스를 쓸 수 있습니까? 좀 더 자세히 설명해 주시겠습니까? –

2

최대 및 최소를 초기화 할 때 arr[0]으로 설정하면 0이됩니다. 즉, 분이 모두 매우 낮은 값으로 준비됩니다.

double.MinValedouble.MaxValue을 사용하면 최대 및 최소 변수를 대신 초기화 할 수 있습니다.

1

이 코드는 귀하가 성취하려고 시도하는 것입니다. 함수가 없기 때문에 배열을 제거했습니다. 두 가지 문제 (코드의 주석 참조) : 1) else if 문 : 값은 동시에 최소값과 최대 값이 될 수 있으며 입력 한 숫자가 항상 이전 값보다 높으면 else에 도달하지 않습니다 . 2) 초기 최소값은 가능한 최대 값이어야합니다.

static void Main(string[] args) 
{ 
    double avr = 0; 
    double sum = 0; 
    double max = 0; 
    double min = Double.MaxValue; // *** Initially set to maximum possible number *** 
    Console.WriteLine("How many numbers?"); 
    int b = Convert.ToInt32(Console.ReadLine()); 
    for (int i = 0; i < b; i++) 
    { 
     double number = Convert.ToDouble(Console.ReadLine()); 
     if (number >= max) 
     { 
      max = number; 
     } 
     if (number <= min) // *** The else is removed here *** 
     { 
      min = number; 
     } 
     sum += number; 
    } 

    sum = sum - max - min; // Exclude lowest and hightest value 
    avr = sum/(b - 2); // Average excluding lowest and highest value 

    Console.WriteLine("sum = {0}, average = {1}, max = {2}, min = {3}", sum, avr, max, min); 
    Console.ReadKey(); 
}