Ругается, что не все ветви кода возвращают значения, как поправить? - C#
Формулировка задачи:
public static int BinarySearch(int[] array, int value)
{
int low = 0;
int high = array.Length - 1;
if (array == null)
throw new ArgumentNullException();
if (array.Length == 0)
return -1;
if (array[low] > value)
return -1;
if (array[high] < value)
return -1;
while (low < high)
{
var ind = (low + high) / 2;
var middle = array[(low + high) / 2];
if (middle > value)
{
high = ind;
}
else
{
low = ind;
}
}
if (array[low] == value)
return low;
}
static void Main(string[] args)
{
TestOneNumber();
TestNegativeNumbers();
TestNonExistentElement();
TestRepeatNumbers();
TestEmptyNumbers();
TestVastNumbers();
Console.ReadKey();
}
private static void TestOneNumber()
{
//Тестирование поиска одного элемента
int[] oneNumber = new[] { 5, 4, 3, 2, 1 };
if (BinarySearch(oneNumber, 3) != 2)
Console.WriteLine("! Поиск не нашёл число 3 среди чисел {5, 4, 3, 2, 1}");
else
Console.WriteLine("Поиск одного элемента работает корректно");
}
private static void TestNegativeNumbers()
{
//Тестирование поиска в отрицательных числах
int[] negativeNumbers = new[] { -5, -4, -3, -2 };
if (BinarySearch(negativeNumbers, -3) != 2)
Console.WriteLine("! Поиск не нашёл число -3 среди чисел {-5, -4, -3, -2}");
else
Console.WriteLine("Поиск среди отрицательных чисел работает корректно");
}
private static void TestNonExistentElement()
{
//Тестирование поиска отсутствующего элемента
int[] negativeNumbers = new[] { -5, -4, -3, -2 };
if (BinarySearch(negativeNumbers, -1) >= 0)
Console.WriteLine("! Поиск нашёл число -1 среди чисел {-5, -4, -3, -2}");
else
Console.WriteLine("Поиск отсутствующего элемента работает корректно");
}
private static void TestRepeatNumbers()
{
//Тестирование поиска элемента, повторяющегося несколько раз
int[] repeatNumbers = new[] { 5, 5, 1, 5, 5 };
var ind = BinarySearch(repeatNumbers, 5);
if (repeatNumbers[ind] != 1)
Console.WriteLine("! Поиск нашёл число 5 среди чисел {5, 5, 1, 5, 5}");
else
Console.WriteLine("Поиск среди элементов, повторяющихся несколько раз работает корректно");
}
private static void TestEmptyNumbers()
{
//Тестирование поиска элемента в пустом массиве
int[] emptyNumbers = new int[] { };
if (BinarySearch(emptyNumbers, 5) != -1)
Console.WriteLine("! Поиск нашёл число 5 среди чисел {}");
else
Console.WriteLine("Поиск элементов в пустом массиве работает корректно");
}
private static void TestVastNumbers()
{
//Тестирование поиска элемента в массиве из 1001 элемента
int[] vastNumbers = new int[100001];
for (int i = 0; i < 100001; i++)
{
vastNumbers[i] = i - 10;
}
for (int i = 0; i < 100001; i++)
{
var ind = BinarySearch(vastNumbers, i);
if (vastNumbers[ind] != i)
Console.WriteLine("! Поиск не нашёл число i среди 100001 элементов");
else
Console.WriteLine("Поиск элементов в массиве из 100001 элемента работает корректно");
}
}
}
}Решение задачи: «Ругается, что не все ветви кода возвращают значения, как поправить?»
textual
Листинг программы
using System;
internal class Program
{
public static int BinarySearch(int[] array, int value)
{
var low = 0;
var high = array.Length - 1;
if (array == null)
throw new ArgumentNullException();
if (array.Length == 0)
return -1;
if (array[low] > value)
return -1;
if (array[high] < value)
return -1;
while (low < high)
{
var ind = (low + high) / 2;
var middle = array[(low + high) / 2];
if (middle > value)
high = ind;
else
low = ind;
}
if (array[low] == value)
return low;
throw new NotImplementedException();
}
private static void Main(string[] args)
{
TestOneNumber();
TestNegativeNumbers();
TestNonExistentElement();
TestRepeatNumbers();
TestEmptyNumbers();
TestVastNumbers();
Console.ReadKey();
}
private static void TestOneNumber()
{
//Тестирование поиска одного элемента
int[] oneNumber = {5, 4, 3, 2, 1};
if (BinarySearch(oneNumber, 3) != 2)
Console.WriteLine("! Поиск не нашёл число 3 среди чисел {5, 4, 3, 2, 1}");
else
Console.WriteLine("Поиск одного элемента работает корректно");
}
private static void TestNegativeNumbers()
{
//Тестирование поиска в отрицательных числах
int[] negativeNumbers = {-5, -4, -3, -2};
if (BinarySearch(negativeNumbers, -3) != 2)
Console.WriteLine("! Поиск не нашёл число -3 среди чисел {-5, -4, -3, -2}");
else
Console.WriteLine("Поиск среди отрицательных чисел работает корректно");
}
private static void TestNonExistentElement()
{
//Тестирование поиска отсутствующего элемента
int[] negativeNumbers = {-5, -4, -3, -2};
if (BinarySearch(negativeNumbers, -1) >= 0)
Console.WriteLine("! Поиск нашёл число -1 среди чисел {-5, -4, -3, -2}");
else
Console.WriteLine("Поиск отсутствующего элемента работает корректно");
}
private static void TestRepeatNumbers()
{
//Тестирование поиска элемента, повторяющегося несколько раз
int[] repeatNumbers = {5, 5, 1, 5, 5};
var ind = BinarySearch(repeatNumbers, 5);
if (repeatNumbers[ind] != 1)
Console.WriteLine("! Поиск нашёл число 5 среди чисел {5, 5, 1, 5, 5}");
else
Console.WriteLine("Поиск среди элементов, повторяющихся несколько раз работает корректно");
}
private static void TestEmptyNumbers()
{
//Тестирование поиска элемента в пустом массиве
int[] emptyNumbers = {};
if (BinarySearch(emptyNumbers, 5) != -1)
Console.WriteLine("! Поиск нашёл число 5 среди чисел {}");
else
Console.WriteLine("Поиск элементов в пустом массиве работает корректно");
}
private static void TestVastNumbers()
{
//Тестирование поиска элемента в массиве из 1001 элемента
var vastNumbers = new int[100001];
for (var i = 0; i < 100001; i++)
vastNumbers[i] = i - 10;
for (var i = 0; i < 100001; i++)
{
var ind = BinarySearch(vastNumbers, i);
if (vastNumbers[ind] != i)
Console.WriteLine("! Поиск не нашёл число i среди 100001 элементов");
else
Console.WriteLine("Поиск элементов в массиве из 100001 элемента работает корректно");
}
}
}