Переписать элементы массива. C#

204
23 марта 2018, 09:50

Ребят, подскажите, почему при добавлении элемента в методе InsertElement() индекс выходит за границы?

namespace CSRIerarchy
{
  class Container
  {
    public static Sofa[] product={};
    public Container()
    {
    }
    public static void InsertElement(Sofa value)
    {
        Sofa[] tmp = new Sofa[product.Length+1];
        for (int i = 0; i <product.Length; i++)
        {
            tmp[i] = product[i];
        }
        product = tmp;
        product[product.Length+1] = value; // Конкретно здесь ошибка.
    }
    public static void DeleteElement( int index)
    {
        if (index < 0 || index >= product.Length)
        {
            Console.WriteLine("Индекс за пределами массива");
            return;
        }
        else
        {
            var newArray = new Sofa[product.Length - 1];
            for (int i = 0; i < product.Length; i++)
            {
                if (i < index)
                {
                    newArray[i] = product[i];
                }
                else if (i > index)
                {
                    newArray[i - 1] = product[i];
                }
            }
        }
    }
    public void SortArray()
    {
    }
  }
}

Вот вызов метода в Main

class Program : Container
{
    public static void Main(String[] args)
    {
        Sofa a = new Sofa("CononeSofa",3244.12,"Для гостинной","Красное дерево, сталь,полиэстер",120,150,"Двухместный");
        Sofa b = new Sofa("CononeSofa", 3244.12, "Для гостинной", "Красное дерево, сталь,полиэстер", 120, 150, "Двухместный");
        Sofa c = new Sofa("CononeSofa", 3244.12, "Для гостинной", "Красное дерево, сталь,полиэстер", 120, 150, "Двухместный");
        InsertElement(a);
        //DeleteElement(0);
    }
}
Answer 1

Индекс последнего элемента - (длина - 1).

public static void InsertElement(Sofa value)
{
  ...
  product[product.Length - 1] = value; // больше нет ошибки
}

public static void DeleteElement( int index)
{
  ...
  product = newArray;
}
Answer 2

Поскольку это не выглядит как учебное задание, вам стоит использовать List<T>, который умеет динамически расти.

class Container
{
    List<Sofa> product = new List<Sofa>();
    public void InsertElement(Sofa value)
    {
        product.Add(value);
    }
    public static void DeleteElement(int index)
    {
        if (index < 0 || index >= product.Length)
        {
            Console.WriteLine("Индекс за пределами массива");
            return;
        }
        product.RemoveAt(index);
    }
}

А если это вдруг учебное задание, то перечитайте лекцию.

READ ALSO
Как лучше хранить элементы

Как лучше хранить элементы

Дано около 6000 5-ти значных чисел их нужно между собой умножать и сравниватьЧто лучше использовать для хранения массив,лист,или строку? Точное...

241
JavaScript или Python [требует правки]

JavaScript или Python [требует правки]

Я начинающий программист, поэтому хочу выбрать язык программированияХочу писать как веб так и gui приложения

193
Скролл-эффект в JS

Скролл-эффект в JS

Есть сайт , на нем есть ссылка, при нажатии на которую происходит скролл, то есть этот код:

210
Теорема о разделяющих осях

Теорема о разделяющих осях

Здравствуйте, сделал столкновение двух правильных многоугольников с помощью теоремы о разделяющих осяхможет подскажет кто, как переделать...

206