Работа с массивами. Подскажите в чем ошибка. - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток всем. Помогите найти оптимальный путь решения проблемы. Дано: Есть массив конечной длинны ARRAY, с элементами типа float. Отсортирован по возрастанию. Некое число типа float X, которое точно больше самого меньшего элемента массива. И меньше самого большего элемента массива. Задача: Найти элемент массива ARRAY, который ближе всего к заданному числу X. Задача кажется простой, но при реализации возникают непредвиденные трудности. У меня есть два метода. В первом цикл, который тупо перебирает все элементы массива.
for(byte i = 0; i < ARRAY.Length; i++){
            if(IsAdjacent(ARRAY,i,X))
                Modifier = 4;
                  ..........
}
Во втором методе, собственно, определяется является ли данный элемент ближайшим к заданному числу
public static bool IsAdjacent(float []ARRAY,byte number, float X){
        
        if(number==0){
 
            if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number+1])){
                        return true;
                         }
 
        }else if(number==ARRAY.Length){
            
            if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number-1])){
                return true;}
 
                }else{
 
            if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number+1])&&Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number-1])){
                return true;}
                }
        
        return false;
    }
При компиляции выскакивает исключение, говорящие о выходе за рамки массива. Хотя, как он может выйти за рамки массива если цикл по определению не может обратится к индексу, больше размера массива.

Решение задачи: «Работа с массивами. Подскажите в чем ошибка.»

textual
Листинг программы
using System;
using System.Linq;
 
namespace ConsoleApplicationTest {
    public static class Program {
        private static void Main() {
            // Начальные данные.
            const int min = 0;
            const int max = 50;
            const int count = 10;
            const int x = 20;
 
            // Создаём массив из случайных упорядоченных элементов.
            Random r = new Random();
            var array = (from i in Enumerable.Repeat( 0, count )
                         let n = r.Next( min, max )
                         orderby n
                         select n).ToArray();
 
            // Находим элемент с минимальным отклонением от x.
            int result = array
                .Skip( 1 )
                .Aggregate(
                    new { d = Math.Abs( array.First() - x ), item = array.First() },
                    ( accum, i ) => Math.Abs( i - x ) < accum.d ? new { d = Math.Abs( i - x ), item = i } : accum,
                    accum => accum.item );
 
            // Выводим результаты.
            foreach ( var i in array ) {
                Console.WriteLine( i );
            }
            Console.WriteLine( "Result = " + result );
 
            Console.ReadKey();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы