가 여기에 두 가지 문제가 있습니다 컴파일이 끝나지 않으면 도달 할 수없는 코드는 경고 일뿐입니다. "단지"라는 말은 반드시 컴파일을 멈추지는 않을 것이지만 버그를 나타내는 것으로 간주해야합니다.
public static bool primeNumber (int num)
{
for (int i = 0; i < num; i++)
{
if (i < 10)
return false;
else
return true;
}
}
이의이 방법이 무엇을하는지 보자 :
나를 여기에 실제 문제를 보여줍니다 새로운 예를 만들어 보자
- 그것은 루프에서 루프를
- 먼저 일을 시작 그것을 무언가를 검사하십시오
- 이 에 따라에 따라이 값이 반환됩니다. 그것은 반환 따라서
,이 비트에 도달하지 :
이
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;
}
}
디버깅을 시도 했습니까? – Haris
여기에 연결할 수없는 코드는 무엇입니까? 컴파일러에서 일부 코드를 나타 냈습니다. 동일하게 처리 할 수 있습니까? –
또는 실제로 "모든 코드 경로가 값을 반환하지 않음"을 의미합니까? 실제로 오류가 있습니까? –