2014-11-05 2 views
0

숫자가 소수인지 확인하기 위해 C# 프로그램을 작성하려고합니다. 첫 번째 두 개의 if 문을 사용하여 여러 옵션을 하나씩 추출한 다음 마지막 else 문 내에서 루프를 중첩 시키려고합니다. '발견 할 수없는 코드가 있음'을 알려줍니다.C#의 "연결할 수없는 코드가 감지되었습니다"오류 메시지

  • 도달 할 수없는 코드 반환 값 문제가 오류가있는 반면
  • 이 방법이 모든 경우

에 값을 반환하지 않으며, :

public static bool primeNumber() 
    { 
     Console.Write ("Please enter a number to see if it is a prime number: "); 
     int num = int.Parse (Console.ReadLine()); 
     if (num % 2 == 0) 
      return false; 
     else if (num % 5 == 0) 
      return false; 
     else { 
      for (int i = 3; i < num/2; i += 2) 
      { 
       if (num % i == 0) 
        return false; 
       else 
        return true; 
      } 
     } 
    } 
+0

디버깅을 시도 했습니까? – Haris

+0

여기에 연결할 수없는 코드는 무엇입니까? 컴파일러에서 일부 코드를 나타 냈습니다. 동일하게 처리 할 수 ​​있습니까? –

+7

또는 실제로 "모든 코드 경로가 값을 반환하지 않음"을 의미합니까? 실제로 오류가 있습니까? –

답변

11

가 여기에 두 가지 문제가 있습니다 컴파일이 끝나지 않으면 도달 할 수없는 코드는 경고 일뿐입니다. "단지"라는 말은 반드시 컴파일을 멈추지는 않을 것이지만 버그를 나타내는 것으로 간주해야합니다.

public static bool primeNumber (int num) 
{ 
    for (int i = 0; i < num; i++) 
    { 
     if (i < 10) 
      return false; 
     else 
      return true; 
    } 
} 

이의이 방법이 무엇을하는지 보자 :

나를 여기에 실제 문제를 보여줍니다 새로운 예를 만들어 보자

  1. 그것은 루프에서 루프를
  2. 먼저 일을 시작 그것을 무언가를 검사하십시오
  3. 에 따라에 따라이 값이 반환됩니다. 그것은 반환 따라서

,이 비트에 도달하지 :

for (int i = 0; i < num; i++) 
         ^^^ 

이 도달 할 수없는 코드입니다.

둘째로, 컴파일러는 항상 num이 루프를 실행할 수있는 값이 될지 여부를 알 수 없으므로 항상 무언가를 반환합니다. 따라서 컴파일러는 num (내 예제에서는 -1 일 수 있음) 값을 가질 가능성이 있다고 생각합니다.이 값은 루프가 실행되지 않도록하여 프로그램이 루프를 건너 뛰도록하므로 다른 끝으로 끝납니다 오류가 발생하면 메서드가 반환해야 할 내용은 무엇입니까?

우리가 코드로 돌아갈 경우

, 여기에 우리가 (즉, 테스트를 증명하는 수에 명중하면 루프에서 반환 으로 방법

public static bool primeNumber() 
{ 
    Console.Write ("Please enter a number to see if it is a prime number: "); 
    int num = int.Parse (Console.ReadLine()); 
    if (num % 2 == 0) 
     return false; 
    else if (num % 5 == 0) 
     return false; 
    else { 
     for (int i = 3; i < num/2; i += 2) 
     { 
      if (num % i == 0) 
       return false; 
     } 
     return true; 
    } 
} 
  • 를 다시 작성하는 방법입니다. 소수가 아님) 도달 할 수없는 코드 문제
  • 을 제거한 다음 루프를 완료하면 그 수가 소수가 아니란 것을 증명할 수 없기 때문에 이 소수입니다. 번호를 입력 한 다음 true을 반환합니다.

의견 : 당신은 사용자가 다음 반환 답을 묻는 기능가 없어야합니다.대신에 나는이 (LINQPad) 프로그램을 작성합니다 : 그것은 첫 번째 실행에 반환로

void Main() 
{ 
    Console.Write ("Please enter a number to see if it is a prime number: "); 
    int num = int.Parse (Console.ReadLine()); 
    if (primeNumber(num)) 
     Console.WriteLine(num + " is a prime number"); 
    else 
     Console.WriteLine(num + " is a not prime number"); 
} 

public static bool primeNumber (int num) 
{ 
    if (num % 2 == 0) 
     return false; 
    else if (num % 5 == 0) 
     return false; 
    else { 
     for (int i = 3; i < num/2; i += 2) 
     { 
      if (num % i == 0) 
       return false; 
     } 
     return true; 
    } 
} 
1

귀하의 for 루프, 여기에 아무것도하지 않는, 그래서

i += 2 

에 도달되지 않습니다.

전체 for 루프는 하나의 return true과 같습니다.

관련 문제