byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.BinarySearch(data, 10);
Console.WriteLine(c);
Ожидал получить 0, но выдает ошибку. Что не так?
C#
C#. Как вернуть индекс определенного элемента массива?Почему ошибка?
Вот рофл так рофл. Все ответы от чат GPT и все про массив не сортирован.
Отвечающие-лемминги - сами-то видели массив?
Проблема в том, что массив из байт, а в BinarySearch вторым параметром уходит int и всё это накрывается медным тазом. Соотв. либо используем int[] data либо приводим второй параметр int к byte
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.BinarySearch(data, (byte)10);
Console.WriteLine(c);
Пруф:
https://onlinegdb.com/6pf58SHti1
Отвечающие-лемминги - сами-то видели массив?
Проблема в том, что массив из байт, а в BinarySearch вторым параметром уходит int и всё это накрывается медным тазом. Соотв. либо используем int[] data либо приводим второй параметр int к byte
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.BinarySearch(data, (byte)10);
Console.WriteLine(c);
Пруф:
https://onlinegdb.com/6pf58SHti1
Дмитрий Цирк
Спасибо. Единственный нормальный ответ. Я сам уже разобрался.
Вы можете использовать метод Array.IndexOf для получения индекса элемента в массиве. Вот пример:
Относительно вашего кода, метод Array.BinarySearch ищет элемент в отсортированном массиве и возвращает отрицательное число, если элемент не найден. Вам нужно проверить результат, прежде чем его использовать. Вот исправленный код:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int index = Array.IndexOf(data, 13);
Console.WriteLine(index); // выведет 3
Вы можете изменить значение 13 на любое другое, чтобы найти индекс другого элемента. Относительно вашего кода, метод Array.BinarySearch ищет элемент в отсортированном массиве и возвращает отрицательное число, если элемент не найден. Вам нужно проверить результат, прежде чем его использовать. Вот исправленный код:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int index = Array.BinarySearch(data, 10);
if (index >= 0)
{
Console.WriteLine(index); // выведет 0
}
else
{
Console.WriteLine("Элемент не найден");
}
Если вы хотите использовать метод Array.BinarySearch, убедитесь, что массив отсортирован.
Дмитрий Цирк
Я ввел вами исправленный код все равно не работает
Дмитрий Цирк
Все равно ошибка

Иван Кириченко
И где-же он не сортирован? =) Завязывайте с ChatGPT только мусор плодите.
Метод Array.BinarySearch предназначен для поиска элемента в упорядоченном массиве, а массив data в вашем коде не является упорядоченным. Поэтому метод не может найти элемент 10 и возвращает отрицательное значение.
Чтобы получить индекс элемента в неупорядоченном массиве, можно воспользоваться методом Array.IndexOf следующим образом:
arduino
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int index = Array.IndexOf(data, 10);
Console.WriteLine(index);
Этот код вернет 0, потому что элемент 10 находится на нулевой позиции в массиве.
Чтобы получить индекс элемента в неупорядоченном массиве, можно воспользоваться методом Array.IndexOf следующим образом:
arduino
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int index = Array.IndexOf(data, 10);
Console.WriteLine(index);
Этот код вернет 0, потому что элемент 10 находится на нулевой позиции в массиве.
Дмитрий Цирк
Что значит не отсортирован? Методом Array.Sort() можно отсортировать?
Иван Кириченко
И где-же он не сортирован? =) Завязывайте с ChatGPT только мусор плодите.
Ответ от GPT-3.5: Ошибка возникает потому, что метод BinarySearch требует, чтобы массив был отсортирован. В данном случае массив data не отсортирован, поэтому возникает ошибка. Для поиска индекса элемента в неотсортированном массиве можно использовать метод IndexOf:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.IndexOf(data, 10);
Console.WriteLine(c); // выводит 0
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.IndexOf(data, 10);
Console.WriteLine(c); // выводит 0
Иван Кириченко
И где-же он не сортирован? =) Завязывайте с ChatGPT только мусор плодите.
Метод Array.BinarySearch предназначен для поиска элемента в отсортированном массиве и возвращает индекс найденного элемента. Если элемент не найден, то метод возвращает отрицательное число, которое может быть использовано для определения индекса, на котором этот элемент мог бы находиться в массиве.
В вашем примере массив data не является отсортированным, поэтому метод Array.BinarySearch не работает корректно и возвращает ошибку.
Чтобы найти индекс элемента в неотсортированном массиве, можно использовать метод Array.IndexOf, например:
Если нужно найти индекс всех вхождений элемента, то можно использовать цикл, например:
В вашем примере массив data не является отсортированным, поэтому метод Array.BinarySearch не работает корректно и возвращает ошибку.
Чтобы найти индекс элемента в неотсортированном массиве, можно использовать метод Array.IndexOf, например:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.IndexOf(data, 10);
Console.WriteLine(c);
В этом случае метод вернет индекс первого вхождения элемента 10 в массиве, который равен 0. Если нужно найти индекс всех вхождений элемента, то можно использовать цикл, например:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
for (int i = 0; i < data.Length; i++)
{
if (data[i] == 10)
{
Console.WriteLine(i);
}
}
В этом случае мы перебираем все элементы массива и выводим индекс каждого элемента, который равен 10.
Иван Кириченко
И где-же он не сортирован? =) Завязывайте с ChatGPT только мусор плодите.
Метод Array.BinarySearch используется для поиска элемента в отсортированном массиве. Он работает на основе алгоритма двоичного поиска и возвращает индекс искомого элемента. Однако в вашем случае массив data не отсортирован, так как содержит два элемента со значением 11 подряд. Из-за этого метод Array.BinarySearch не может корректно найти индекс элемента со значением 10 и возвращает ошибку.
Чтобы исправить эту проблему, вы можете отсортировать массив перед использованием метода Array.BinarySearch или использовать другой метод для поиска индекса элемента, например, метод Array.IndexOf:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.IndexOf(data, 10);
Console.WriteLine(c);
Этот код вернет ожидаемый результат: индекс элемента со значением 10 равен 0.
Чтобы исправить эту проблему, вы можете отсортировать массив перед использованием метода Array.BinarySearch или использовать другой метод для поиска индекса элемента, например, метод Array.IndexOf:
byte[] data = { 10, 11, 11, 13, 14, 15, 16, 17, 18, 19, 20 };
int c = Array.IndexOf(data, 10);
Console.WriteLine(c);
Этот код вернет ожидаемый результат: индекс элемента со значением 10 равен 0.
Дмитрий Цирк
Что значит не отсортирован? Методом Array.Sort() можно отсортировать?
Дмитрий Цирк
выводит -1
Иван Кириченко
И где-же он не сортирован? =) Завязывайте с ChatGPT только мусор плодите.
Похожие вопросы
- Почему в C# нумерация (индексы) элементов массива начинаются с нуля, а не с единицы?
- C# Массив структур.Конструктор .Доступ к отдельным элементам массива в массиве структур.
- Как можно найти одинаковые элементы массива? С#
- Решил попробовать изучать программирование (C# конкретно) и вот не могу понять почему код с упражнения не работает
- Индексы с массивами С#
- C#. Задание с двумерным массивом.
- Помогите написать программу с массивом на C#
- Задача массивы c# , прошу помощи...
- Сортировка Двумерного массива C#
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.