Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
1

Как создать метод удаления из массива

29.08.2016, 20:48. Показов 1264. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Дали задание написать несколько наследуемых классов. Один абстрактный interface Vehicles. Наследуемые Lorry, Car, Van. И отдельный класс - VechicleProperities, где происходит заполнения массива в методе Add() и вывод на экран;

C#
1
2
3
4
 interface IVehicles
    {
        void Properitiess(); 
    }

C#
1
2
3
4
5
6
7
8
9
10
namespace Hometask
{
    class Car: IVehicles
    {
        public void Properities()
        {
            Console.WriteLine("Car is moving faster");
        }
    }
}
И еще два наследуемых класса Lorry и Van, аналогичных Car.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
namespace Hometask
{
    class VechicleProperities
    {
       IVehicles[] VehiclesArray;
       public VechicleProperities(int SIZE) 
        {
          VehiclesArray = new IVehicles[SIZE];
        }
      
        
        public void Add(IVehicles V)
        {
            for(int i=0; i<VehiclesArray.Length; i++)
            {
                if (VehiclesArray[i] == null)
                {
                    VehiclesArray[i] = a;
                    break;
                }
            }
 
        }
         public void Output()
        {
            for (int i = 0; i < VehiclesArray.Length; i++)
            {
                VehiclesArray[i].Parameters();
            }
        }
    }
}
Основной код.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Hometask
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите количество итераций");
            int SIZE = Convert.ToInt32(Console.ReadLine());
            VechicleProperities myVechicle = new VechicleProperities(SIZE);
            while (SIZE>0)
            {
                int menu = Convert.ToInt32(Console.ReadLine());
                switch (menu)
                {
                    case 1:
                            Car myCar = new Car();
                            myVechicle .Add(myCar);
                    break;
                    case 2:
                            Lorry myL = new Lorry();
                            myVechicle.Add(myL);
                    break;
                    case 3:
                            Van myV = new Van();
                            myVechicle.Add(h);
                    break;
                    
                    default: Console.WriteLine("Введите правильный номер"); break;
                }
 
                SIZE --;
            }
            myVechicle.Output();
            Console.Read();
        }
    }
}
Как сделать метод Remove, что бы стирать из массива информацию о технических средствах?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2016, 20:48
Ответы с готовыми решениями:

Как создать метод для заполнения массива
Вот условие задачи: Создать статический метод, который будет иметь два целочисленных параметра a и...

создать функцию удаления max и min эл-та массива
Я написал почти всю программу в которой задание состоит следующим образом: Удалить максимальный и...

Как реализовать метод добавления и удаления в listbox
Не могу создать ни одного объекта, они получаются с пустым именем и 0 лет. Я знаю что при создании...

Как правильно реализовать метод добавления и удаления объектов в хранилище без перегрузки?
Не знаю как правильно здесь реализовать метод добавления и удаления объектов в хранилище без...

24
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
29.08.2016, 21:48 2
Цитата Сообщение от Jman Посмотреть сообщение
Как сделать метод Remove, что бы стирать из массива информацию о технических средствах?
это не те самые грабли, это другие грабли, прошло много лет, они очень изменились.
Используй List<T>, там есть и метод Add, и Remove. Откуда тяга к арийскому велу?
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
29.08.2016, 22:19  [ТС] 3
Цитата Сообщение от iDReeM Посмотреть сообщение
Откуда тяга к арийскому велу?
Про одно-двусвязный список знаком по CPP. Но тут мне сказали сделать на базе такого паттерна.
0
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
29.08.2016, 22:28 4
Цитата Сообщение от Jman Посмотреть сообщение
Но тут мне сказали сделать на базе такого паттерна.
в таком случае, чтобы удалить елемент мосива, нужно перезаписать мосив заного, без этого элемента. На пример обнули его значение для идентификации при перезаполнении мосива, если == 0 => continue;
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
29.08.2016, 22:40  [ТС] 5
Можете показать наглядно кодом? А то я пока не могу въехать.
C#
1
2
3
4
5
6
7
8
9
10
11
12
 public void Remove(IVehicles V)
        {
            for(int i=0; i<VehiclesArray.Length; i++)
            {
                if (VehiclesArray[i] != null)
                {
                    VehiclesArray[i] = и тут что-то делаем с нужным индексом?;
                    break;
                }
            }
 
        }
0
14 / 14 / 5
Регистрация: 15.12.2014
Сообщений: 90
29.08.2016, 23:50 6
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public void RemoveAt(int index) // убираем по индексу
        {
            for (int i = index; i <= VehiclesArray.Length-2; i++)
            {                
                VehiclesArray[i] = VehiclesArray[i + 1];
                if (VehiclesArray[i] == VehiclesArray.Length - 2) VehiclesArray[i-1] = null;
            }
        }
 
        public void Remove() //убираем последний элемент
        {
            VehiclesArray[VehiclesArray.Length - 1] == null;
        }
1
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
29.08.2016, 23:52 7
а, ответ выше дали
0
14 / 14 / 5
Регистрация: 15.12.2014
Сообщений: 90
30.08.2016, 00:12 8
Это чтоб наверняка, если вдруг вам надо удалить по конкретному элементу

C#
1
2
3
4
5
6
7
8
9
10
11
using System.Linq;
 
        public void Remove(IVehicles V) // убираем по элементу
        {
            var index = VehiclesArray.ToList().FindIndex(vehicle => vehicle.GetHashCode() == V.GetHashCode())-1;
            for (int i = index; i <= VehiclesArray.Length-2; i++)
            {                
                VehiclesArray[i] = VehiclesArray[i + 1];
                if (VehiclesArray[i] == VehiclesArray.Length - 2) VehiclesArray[i-1] = null;
            }
        }
1
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
30.08.2016, 09:55  [ТС] 9
Цитата Сообщение от Msey Посмотреть сообщение
public void RemoveAt(int index) // убираем по индексу
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS0019 Оператор "==" невозможно применить к операнду типа "IVehicles" и "int".
Вылетает ошибка

Добавлено через 17 минут
Говорит неверные типы...
0
14 / 14 / 5
Регистрация: 15.12.2014
Сообщений: 90
30.08.2016, 10:14 10
Цитата Сообщение от Jman Посмотреть сообщение
Ошибка CS0019 Оператор "==" невозможно применить к операнду типа "IVehicles" и "int".
C#
1
 if (VehiclesArray[i] == VehiclesArray.Length - 2) VehiclesArray[i-1] = null;
замените на
C#
1
 if (i == VehiclesArray.Length - 2) VehiclesArray[i-1] = null;
и в методе Remove по элементу тоже замените на всякий случай, если будете использовать.
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
30.08.2016, 10:31  [ТС] 11
А вот тут не так разве
C++
1
2
3
4
public void Remove() //убираем последний элемент
        {
            VehiclesArray[VehiclesArray.Length - 1] == null;
        }
C++
1
2
3
4
public void Remove() //убираем последний элемент
        {
            VehiclesArray[VehiclesArray.Length - 1] = null;
        }
0
14 / 14 / 5
Регистрация: 15.12.2014
Сообщений: 90
30.08.2016, 10:46 12
чтоб не запутались)

Цитата Сообщение от Msey Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
using System.Linq;
 
        public void Remove(IVehicles V) // убираем по элементу
        {
            var index = VehiclesArray.ToList().FindIndex(vehicle => vehicle.GetHashCode() == V.GetHashCode())-1;
            for (int i = index; i <= VehiclesArray.Length-2; i++)
            {                
                VehiclesArray[i] = VehiclesArray[i + 1];
                if (VehiclesArray[i] == VehiclesArray.Length - 2) VehiclesArray[i-1] = null;
            }
        }
Цитата Сообщение от Msey Посмотреть сообщение
C#
1
2
                VehiclesArray[i] = VehiclesArray[i + 1];
                if (VehiclesArray[i] == VehiclesArray.Length - 2) VehiclesArray[i-1] = null;
Цитата Сообщение от Msey Посмотреть сообщение
C#
1
if (VehiclesArray[i] == VehiclesArray.Length - 2) VehiclesArray[i-1] = null;
Цитата Сообщение от Msey Посмотреть сообщение
C#
1
VehiclesArray[i] == VehiclesArray.Length - 2
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 11:26 13
Цитата Сообщение от iDReeM Посмотреть сообщение
Используй List<T>, там есть и метод Add, и Remove
Цитата Сообщение от Jman Посмотреть сообщение
Про одно-двусвязный список знаком по CPP
List<T> в .NET не тот же List что в C++ (не .NET). Это не одно-двусвязный список. Это динамическая индексируемая последовательность.
1
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
30.08.2016, 11:35  [ТС] 14
Как в main вызвать метод с с показом измененного массива.
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 11:48 15
Jman, вообще, в реализацию лучше бы еще добавить актуальный размер Вашей коллекции. Т.е. при добавлении его инкрементировать, при удалении - декрементировать.
Тогда в методе Output заменить в условии свойство Length цикла на актуальный размер коллекции и выводить только актуальные элементы.
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
30.08.2016, 11:57  [ТС] 16
Цитата Сообщение от golubyatnikovtv Посмотреть сообщение
Тогда в методе Output заменить в условии свойство Length
Да хотя бы вывести измененный массив с удаленным индексом, без актуальных элементов.

Добавлено через 4 минуты
Происходит печать без изменений.
C#
1
2
3
4
5
  int index = Convert.ToInt32(Console.ReadLine());
            myVechicle.RemoveAtIndex(index);
            // Printing changed array;
            myVechicle.Output();
            Console.Read();
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 12:10 17
Jman, а какое сейчас у Вас актуальное состояние кода класса VechicleProperities? Наверняка при удалении/добавлении что-то не так. Покажите класс.
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
30.08.2016, 12:27  [ТС] 18
Цитата Сообщение от golubyatnikovtv Посмотреть сообщение
а какое сейчас у Вас актуальное состояние кода
Я переписал и выложил на GitHub. Могу выложить линк? Или если вам не сложно. могу в личку.
0
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
30.08.2016, 12:29 19
Jman, лучше бы сюда, кто его знает что с Вашим GitHub в будущем произойдет, а тут код сохранится.
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
30.08.2016, 12:35  [ТС] 20
C#
1
2
3
4
5
6
7
namespace Hometask
{
    interface ISwimming
    {
        void Ability(); // Without override in classes;
    }
}
C#
1
2
3
4
5
6
7
8
9
10
namespace Hometask
{
    class Fish:ISwimming
    {
        public void Ability()
        {
            Console.WriteLine("Fish is could only swim!");
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
namespace Hometask
{
    class Pool
    {
       
        ISwimming[] ArrayForSwimming; 
        public Pool(int SIZE) 
        {
            ArrayForSwimming = new ISwimming[SIZE]; 
        
        }
    
        public void AddSwimmingAnimals(ISwimming AnimalsProperty)
        {
            for (int i = 0; i < ArrayForSwimming.Length; i++)
            {
                if (ArrayForSwimming[i] == null)
                {
                    ArrayForSwimming[i] = AnimalsProperty;
                    break;
                }
            }
        }
     
        public void StartSwimming()
        {
            for (int i = 0; i < ArrayForSwimming.Length; i++)
                ArrayForSwimming[i].Ability();
        }
 
        // Erase by index; 
        public void RemoveAtIndex(int index) 
        {
           for (int i = index; i <= ArrayForSwimming.Length - 2; i++)
            {
                ArrayForSwimming[i] = ArrayForSwimming[i + 1];
                if (i == ArrayForSwimming.Length - 2)
                ArrayForSwimming[i - 1] = null;
               
            }
 
        }
        // Doesn't work good;
        public void PrintChagedArray()
        {
            for (int i = 0; i < ArrayForSwimming.Length; i++)
                Console.WriteLine(ArrayForSwimming[i]);
        }
 
        // Erase last element;
        public void Remove() 
        {
            int i = 0;
            if (i == ArrayForSwimming.Length - 2)
                ArrayForSwimming[i] = null;
        }
 
    }
}
0
30.08.2016, 12:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2016, 12:35
Помогаю со студенческими работами здесь

Как создать программку для удаления файлов?
Подскажите пожалуйста как создать программку которая будет удалять запрограммированные в ней файлы...

Как создать функцию для удаления по времени
Возникла проблема с защитой базы данных от воровства. Хочу спросить знающих людей. Единственное...

Как создать форму для добавления и удаления данных?
объясните как создать форму для добавления и удаления данных

Создать класс ОдномерныйМассив. Создать метод для вычисления суммы элементов двух массивов. Метод должен иметь два аргум
Создать класс ОдномерныйМассив. Создать метод для вычисления суммы элементов двух массивов. Метод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru