Ругается, что не все ветви кода возвращают значения, как поправить? - 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 элемента работает корректно"); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д