2013-09-02 2 views
2

내 프로그램에서 0으로 나누기 예외로 인해 문제가 있습니다. 몇 가지 트릭을 시도했지만 그들 중 누구도 일하지 않았습니다. 0으로 나누지 않으려면 코드에서 무엇을 변경해야합니까?제로 경고로 나누기

"IF"부분에 코드를 추가해야한다는 것을 알고 있지만 정확히 무엇을해야하는지 잘 모릅니다.

for (counter = 0; counter < numbers.Length; counter++) 
{ 
    string input = Console.ReadLine(); 

    if(string.IsNullOrEmpty(input)) 
    { 
     break; 
    } 
    else 
    { 
     int.TryParse (input, out numbers[counter]); 
    } 
} 

for (int i = 0; i < numbers.Length; i++) { 
    sum += numbers [i]; 

    if (numbers [i] % 3 == 0 && numbers [i] % 9 != 0) { 
     div3not9++; 
    } 

    if (numbers [i] >= 11 && numbers [i] <= 131 && (numbers [i] * numbers [i] % 7 == 0) && (numbers [i] * numbers [i] % 3 != 0)) { 
     range11to131sqdiv7not3++; 
     SUMrange11to131sqdiv7not3 += numbers [i]; 

     if (range11to131sqdiv7not3 > 0) { 
      mean = SUMrange11to131sqdiv7not3/range11to131sqdiv7not3; 
     } 
      else 
       mean = 0; 
     } 

    } 

for (int y = 0; y < numbers.Length; y++) { 
    if (numbers [y] > 0) 
     min = numbers [y]; 
} 
for (int r = 0; r < numbers.Length; r++) { 
    if (numbers [r] < min && numbers [r] > 0) 
     min = numbers [r]; 

    if (numbers [r] % min == 0) { 
     divmin++; // DIVISION BY ZERO EXCEPTION 
    } 

    if (sum % numbers [r] == 0) { 
     divisorsofsum++; // DIVISION BY ZERO EXCEPTION 
    } 
} 
+1

추가 의견을 확인하는 x%min을 할 때 때문에 것 도움이 되길. – dcastro

+5

코멘트를 필요로하지 않도록 코드를 작성하면 도움이됩니다. – BartoszKP

+0

'divmin ++; // DIVISION BY ZERO EXCEPTION' 즉,이 줄 _은 0으로 나누기 예외가 발생한다는 뜻입니까? 문제를보다 정확하게 설명하십시오. _ 어디에서 발생합니까? –

답변

6

제로에 의한 나누기가 % 연산자의 사용에 기인한다. 이 operator returns the remainder of a division과 두 번째 피연산자가 0이면 실패합니다.

numbers[r] % min 

가 0 나누기 오류 시킨다면

그래서 다음 min은 0이다. 그 사건을 특별하게 대우해야합니다. 그리고 다른 연산자 인 %도 마찬가지입니다.

+0

@Artur로 간주됩니다. 이보다 더 많은 것을 원하십니까? 이것이 당신이 직면 한 문제를 설명하지 못하는가? –

1

변화 마지막 for 문 :

for (int r = 0; r < numbers.Length; r++) { 
    if (numbers [r] < min && numbers [r] > 0) 
     min = numbers [r]; 

    if (min == 0) 
    { 
     // What to do when min is 0 is up to you 
    } 
    else 
    { 
     if (numbers [r] % min == 0) { 
      divmin++; 
     } 

     if (sum % numbers [r] == 0) { 
      divisorsofsum++; 
     } 
    } 
} 

min 때문이 아니어야 0, 실제로 min로 나누어과 코드에 남아있는

+0

코드를 조금 변경했는데, 배열에서 최소값을 찾는 데 문제가있어서 어떤 정수가 최소값을 가지더라도 프로그램은 "0"을 최소값으로 반환합니다. 이런 종류의 코드 :'int min = 0; \t \t \t 찾는 INT (I = 0; I 0) \t \t \t 경우 \t \t min = userInput [i]; \t \t \t} ' – ltantonov

+0

@ArturAntonczyk int.MaxVal을 min으로 시작하십시오. –