Есть две проблемы:
- Недоступен код
- Метод не возвращает значение во всех случаях
В то время как проблема возвращается значение ошибки, и прекратит компиляцию от завершения, недостижимый код является всего лишь предупреждением. Под «просто» я подразумеваю, что это не обязательно остановит ваш компилятор, но вы должны рассматривать его как признак ошибки.
Позвольте мне написать новый пример, который показывает реальную проблему здесь:
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
Что такое недостижимый код здесь? Компилятор указал какой-то код, можете ли вы сделать то же самое? –
Или вы на самом деле означали, что «не все пути кода возвращают значение», что является реальной ошибкой здесь? –