From b0b2cb60d8d86f4a682e79b1d6e19d191097a96c Mon Sep 17 00:00:00 2001 From: insideq Date: Mon, 4 Mar 2024 13:03:43 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F=D0=BB=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BF=D1=8B=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0?= =?UTF-8?q?=D1=89=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20=D0=B7=D0=BD=D0=B0=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 8 +-- .../ICollectionGenericObjects.cs | 6 +- .../MassiveGenericObjects.cs | 56 +++++++++++-------- .../FormBulldozerCollection.cs | 4 +- 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/AbstractCompany.cs b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/AbstractCompany.cs index 86ce348..3772f55 100644 --- a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/AbstractCompany.cs @@ -57,9 +57,9 @@ public abstract class AbstractCompany /// Компания /// Добавляемый объект /// - public static bool operator +(AbstractCompany company, DrawningBulldozer bulldozer) + public static int operator +(AbstractCompany company, DrawningBulldozer bulldozer) { - return company._collection?.Insert(bulldozer) ?? false; + return company._collection.Insert(bulldozer); } /// @@ -68,9 +68,9 @@ public abstract class AbstractCompany /// Компания /// Номер удаляемого объекта /// - public static bool operator -(AbstractCompany company, int position) + public static DrawningBulldozer operator -(AbstractCompany company, int position) { - return company._collection?.Remove(position) ?? false; + return company._collection.Remove(position); } /// diff --git a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/ICollectionGenericObjects.cs index 8af06e7..af57cfc 100644 --- a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -22,7 +22,7 @@ public interface ICollectionGenericObjects /// /// Добавляемый объект /// true - вставка прошла успешно, false - вставка не удалась - bool Insert(T obj); + int Insert(T obj); /// /// Добавление элемента в коллекцию на конкретную позицию @@ -30,14 +30,14 @@ public interface ICollectionGenericObjects /// Добавляемый элемент /// Позиция /// true - вставка прошла успешно, false - вставка не удалась - bool Insert(T obj, int position); + int Insert(T obj, int position); /// /// Удаление объекта из коллекции с конкретной позиции /// /// Позиция /// true - удаление прошло успешно, false - удаление не удалось - bool Remove(int position); + T? Remove(int position); /// /// Получение объекта по позиции diff --git a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/MassiveGenericObjects.cs index d4b4179..dbfaa4f 100644 --- a/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectExcavator/ProjectExcavator/CollectionGenericObjects/MassiveGenericObjects.cs @@ -30,11 +30,11 @@ public class MassiveGenericObjects : ICollectionGenericObjects if (position >= _collection.Length || position < 0) { return null; - } + } return _collection[position]; } - public bool Insert(T obj) + public int Insert(T obj) { // TODO вставка в свободное место набора int index = 0; @@ -43,14 +43,14 @@ public class MassiveGenericObjects : ICollectionGenericObjects if (_collection[index] == null) { _collection[index] = obj; - return true; + return index; } index++; } - return false; + return -1; } - public bool Insert(T obj, int position) + public int Insert(T obj, int position) { // TODO проверка позиции // TODO проверка, что элемент массива по этой позиции пустой, если нет, то @@ -58,39 +58,49 @@ public class MassiveGenericObjects : ICollectionGenericObjects // если нет после, ищем до // TODO вставка if (position >= _collection.Length || position < 0) - return false; + return -1; - while (position + 1 < _collection.Length) + // TODO проверка, что элемент массива по этой позиции пустой, если нет, то + if (_collection[position] != null) { - if (_collection[position] == null) + // проверка, что после вставляемого элемента в массиве есть пустой элемент + int nullIndex = -1; + for (int i = position + 1; i < Count; i++) { - _collection[position] = obj; - return true; + if (_collection[i] == null) + { + nullIndex = i; + break; + } } - position++; - } - - while (position - 1 >= 0) - { - if (_collection[position] == null) + // Если пустого элемента нет, то выходим + if (nullIndex < 0) { - _collection[position] = obj; - return true; + return -1; + } + // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента + int j = nullIndex - 1; + while (j >= position) + { + _collection[j + 1] = _collection[j]; + j--; } - position--; } - return false; + // TODO вставка по позиции + _collection[position] = obj; + return position; } - public bool Remove(int position) + public T? Remove(int position) { // TODO проверка позиции // TODO удаление объекта из массива, присвоив элементу массива значение null if (position >= _collection.Length || position < 0) { - return false; + return null; } + T temp = _collection[position]; _collection[position] = null; - return true; + return temp; } } diff --git a/ProjectExcavator/ProjectExcavator/FormBulldozerCollection.cs b/ProjectExcavator/ProjectExcavator/FormBulldozerCollection.cs index 6c4389e..96d151e 100644 --- a/ProjectExcavator/ProjectExcavator/FormBulldozerCollection.cs +++ b/ProjectExcavator/ProjectExcavator/FormBulldozerCollection.cs @@ -78,7 +78,7 @@ public partial class FormBulldozerCollection : Form return; } - if (_company + drawningBulldozer) + if (_company + drawningBulldozer != -1) { MessageBox.Show("Объект добавлен"); pictureBox.Image = _company.Show(); @@ -114,7 +114,7 @@ public partial class FormBulldozerCollection : Form } int pos = Convert.ToInt32(maskedTextBoxPosition.Text); - if (_company - pos) + if (_company - pos != null) { MessageBox.Show("Объект удален"); pictureBox.Image = _company.Show();