В моем коде мне нужно пробежаться по некоторым файлам с загрузкой чисел, и в какой-то момент пользователю нужно ввести число, чтобы увидеть, находится ли оно в файле или нет, если оно находится в файле, то возвращая вывод должен быть позиционирование где в файле. Если его нет в списке, то мне нужно вернуть ближайшее значение для их ввода. Например, 669 есть в списке, а 668 нет. Мой код выглядит следующим образом для функции, чтобы найти ближайшее значение:
static int nearest(int close_num, int[] a)
{
int result = -1;
long smallestDelta = long.MaxValue;
foreach (int bob in a)
{
long delta = (bob > close_num) ? (bob - close_num) : (close_num - bob);
if (delta < smallestDelta)
{
smallestDelta = delta;
result = bob;
}
}
return result;
Тогда линейный поиск и остальное выглядит следующим образом:
Console.WriteLine("Enter a number to find out if is in the selected Net File: ");
int i3 = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < a.Length; i++)//looping through array
{
if (a[i] == i3)//checking to see the value is found in the array
{
Console.WriteLine("Value found and the position of it in the selected Net File is: " + i, a[i]);
break;
}
else
{
int found = nearest(i3, a);
Console.WriteLine("Cannot find this number in the Net File however here the closest number to that: " + found);
Однако это мои выводы: [ Вывод 1: при вводе значения, которое является файлом, по какой-то причине печатается вызов else 3x раньше, если я удаляю разрыв в коде, который он просто разрывает. 1
Выход 2: печать во время работы через весь список значений
как я могу исправить эти проблемы с форматированием b c код делает то, что мне нужно, просто не так, как должно. Спасибо