Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
-49 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 252
1

Добавить в конец динамического массива новый элемент

12.02.2020, 19:29. Показов 1099. Ответов 9
Метки нет (Все метки)

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
 class Program
    {
        static void Main(string[] args)
        {
            int size = 5;
            int[] array = new int[size];
            Massive massive = new Massive();
            massive.Random(array,size);
            massive.Out(array, size);
            massive.Add(array, size, 111);
            massive.Out(array, size);
            Console.ReadKey();
        }
    }
 
class Massive
    {
        public void Add(int[] array, int size, int value)
        {
            int[] newArray = new int[size + 1];
            for (int i = 0; i < size; i++)
            {
                newArray[i] = array[i];
 
            }
            newArray[size] = value;
            size++;
            array = newArray;
        }
        public void Random(int[] array,int size)
        {
            Random rand = new Random();
            for (int i = 0; i < size; i++)
            {
                array[i] = rand.Next(30);
            }
        }
        public void Out(int[] array, int size)
        {
            Console.Write("Вывод массива: ");
            for (int i = 0; i < size; i++)
            {
                Console.Write(array[i] + " ");
            }
        }
    }
в чем ошибка, почему он не выводит новый массив(
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2020, 19:29
Ответы с готовыми решениями:

Как добавить новый элемент в i-ю ветку двумерного динамического массива?
Массив описан так: List&lt;List&lt;int&gt;&gt; path = new List&lt;List&lt;int&gt;&gt;(); List&lt;int&gt; path_br = new...

Удалить из списка заданный элемент, добавить в конец новый элемент, напечатать список в обратном порядке
Прошу помощи! Пусть дан циклический двунаправленный список, с информативным полем - целое число:...

Добавить в начало списка новый элемент со значением D1, а в конец – новый элемент со значением D2
Здравствуйте подскажите пожалуйста как написать программу по заданию Даны числа D1 и D2 и...

Как добавить новый элемент в конец списка?
ребят, есть код добавления элемента в начало списка, но никак не могу допетрить , как добавить в...

9
Эксперт JS
6430 / 3880 / 2003
Регистрация: 14.06.2018
Сообщений: 6,777
12.02.2020, 19:43 2
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Question2583301
{
    class Program
    {
        static void Main(string[] args)
        {
            int size = 5;
            int[] array = new int[size];
            Massive massive = new Massive();
            massive.Random(array);
            massive.Out(array);
            massive.Add(ref array, 111);
            massive.Out(array);
            Console.ReadKey();
        }
    }
 
    class Massive
    {
        public void Add(ref int[] array, int value)
        {
            int size = array.Length;
            int[] newArray = new int[size + 1];
            for (int i = 0; i < size; i++)
            {
                newArray[i] = array[i];
 
            }
            newArray[size] = value;
 
            array = newArray;
        }
        public void Random(int[] array)
        {
            int size = array.Length;
            Random rand = new Random();
            for (int i = 0; i < size; i++)
            {
                array[i] = rand.Next(30);
            }
        }
        public void Out(int[] array)
        {
            int size = array.Length;
            Console.Write("Вывод массива: ");
            for (int i = 0; i < size; i++)
            {
                Console.Write(array[i] + " ");
            }
        }
    }
}
1
-49 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 252
14.02.2020, 18:27  [ТС] 3
А как сделать блочное наращивание,н-р, в степени 2(2,4,8...)
0
Эксперт JS
6430 / 3880 / 2003
Регистрация: 14.06.2018
Сообщений: 6,777
14.02.2020, 20:01 4
Цитата Сообщение от plktre Посмотреть сообщение
А как сделать блочное наращивание,н-р, в степени 2(2,4,8...)
https://referencesource.micros... 15773d6643
Смотрим сюда:
C#
1
2
3
4
5
6
7
8
9
10
11
        // Adds the given object to the end of this list. The size of the list is
        // increased by one. If required, the capacity of the list is doubled
        // before adding the new element.
        //
        public virtual int Add(Object value) {
            // Не нужно Contract.Ensures(Contract.Result<int>() >= 0);
            if (_size == _items.Length) EnsureCapacity(_size + 1);
            _items[_size] = value;
            _version++;
            return _size++;
        }
Потом сюда:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        // Ensures that the capacity of this list is at least the given minimum
        // value. If the currect capacity of the list is less than min, the
        // capacity is increased to twice the current capacity or to min,
        // whichever is larger.
        private void EnsureCapacity(int min) {
            if (_items.Length < min) {
                int newCapacity = _items.Length == 0? _defaultCapacity: _items.Length * 2;
                // Allow the list to grow to maximum possible capacity (~2G elements) before encountering overflow.
                // Note that this check works even when _items.Length overflowed thanks to the (uint) cast
                if ((uint)newCapacity > Array.MaxArrayLength) newCapacity = Array.MaxArrayLength;
                if (newCapacity < min) newCapacity = min;
                Capacity = newCapacity;
            }
        }
И переделываем класс Massive.
Массив запихиваем вовнутрь как приватное поле.
C#
1
Massive massive = new Massive(5); // где 5 - начальный размер массива
То есть повторяем себе упрощенный ArrayList для целых чисел.
0
-49 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 252
18.02.2020, 13:40  [ТС] 5
В чем различие _size и _items
__
(как у меня size и array.Length?)

Добавлено через 22 минуты
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
class Massive
    {
        private int size;
        private int[] array;
        private const int defaultCapacity = 4;
        public int Add1(int value)
        {
            if(size==array.Length)
            {
                EnsureCapacity(size + 1);
                array[size] = value;
                return size++;
            }
        }
        private void EnsureCapacity(int min)
        {
            if (array.Length < min)
            {
                int newArray = array.Length == 0 ? defaultCapacity : array.Length * 2;
                if (newArray < min) newArray = min;
                array = newArray;
            }
        }
            public void Random(int[] array)
        {
            int size = array.Length;
            Random rand = new Random();
            for (int i = 0; i < size; i++)
            {
                array[i] = rand.Next(30);
            }
        }
        public void Out(int[] array)
        {
            int size = array.Length;
            Console.Write("\n"+"Вывод массива:");
            for (int i = 0; i < size; i++)
            {
                Console.Write(array[i] + " ");
            }
        }
    }
0
18 / 12 / 6
Регистрация: 29.08.2015
Сообщений: 115
18.02.2020, 15:03 6
Быть может вы хотели использовать что-то вроде Array.Resize? Тогда и код Add стал бы куда меньше, и выглядел бы примерно так:
C#
1
2
3
4
5
6
        
        public void Add(ref int[] array, int value)
        {
            Array.Resize(ref array, array.Length + 1);
            array[array.Length-1] = value;
        }
0
Эксперт JS
6430 / 3880 / 2003
Регистрация: 14.06.2018
Сообщений: 6,777
18.02.2020, 16:56 7
Цитата Сообщение от plktre Посмотреть сообщение
_items
Это как раз поле класса Massive, в котором и лежит настоящий исходный массив.
Цитата Сообщение от plktre Посмотреть сообщение
_size
Это количество хранящихся в массиве чисел.
Физический размер массива всегда больше или равен количеству хранящихся чисел.
Если места не хватает, то расширяем жилплощадь в два раза, как и просили жильцы в проекте.

Добавлено через 9 минут
---
Jluc, прикольно, Array.Resize() изобрели в .NET 2.0

Этот метод в древнем Бейсике же был

Добавлено через 3 минуты
В исходниках программисты даже не знали об Array.Resize ?
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
        // Gets and sets the capacity of this list.  The capacity is the size of
        // the internal array used to hold items.  When set, the internal 
        // array of the list is reallocated to the given capacity.
        // 
         public virtual int Capacity {
            get {
                Contract.Ensures(Contract.Result<int>() >= Count);
                return _items.Length;
            }
            set {
                if (value < _size) {
                    throw new ArgumentOutOfRangeException("value", Environment.GetResourceString("ArgumentOutOfRange_SmallCapacity"));
                }
                Contract.Ensures(Capacity >= 0);
                Contract.EndContractBlock();
                // We don't want to update the version number when we change the capacity.
                // Some existing applications have dependency on this.
                if (value != _items.Length) {
                    if (value > 0) {
                        Object[] newItems = new Object[value];
                        if (_size > 0) { 
                            Array.Copy(_items, 0, newItems, 0, _size);
                        }
                        _items = newItems;
                    }
                    else {
                        _items = new Object[_defaultCapacity];
                    }
                }            
            }
        }
0
18 / 12 / 6
Регистрация: 29.08.2015
Сообщений: 115
18.02.2020, 18:00 8
amr-now, мне непонятна ваша реакция. Что не так с Array.Resize?
0
Эксперт JS
6430 / 3880 / 2003
Регистрация: 14.06.2018
Сообщений: 6,777
18.02.2020, 18:31 9
plktre, короче.
Вот инструкция, что как сделать динамический список на основе массива:
https://tproger.ru/translation... beginners/

Если у Вас не получится прочитать статью, то Jluc с удовольствием напишет Вам вместо Вас программу.
0
-49 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 252
20.02.2020, 18:25  [ТС] 10
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void RemoveAt(int index)
{
    if (index >= Count)
    {
        throw new IndexOutOfRangeException();
    }
 
    int shiftStart = index + 1;
    if (shiftStart < Count)
    {
        Array.Copy(_items, shiftStart, _items, index, Count - shiftStart);
    }
 
    Count--;
}
Как переписать,чтобы Array.Copy не использовать??

C#
1
2
3
4
for (int i = 0; i < Count-shiftStart; i++)
                {
                    _items[shiftStart] = _items[index];
                }
попыталась так, но считает неправильно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2020, 18:25

Как добавить в конец двумерного динамического массива строку?
Уже какой день долблюсь и не могу добавить в конец динамического массива строку. Суть задания...

Добавить значение в конец динамического массива (имитация функции вектора)
#include &lt;iostream&gt; using namespace std; void show(int **P,int N) //отображение массива { ...

Если слово встретилось первый раз, то для него добавить новый элемент в конец списка
азработайте программу, которая читает из стандартного потока ввода слова и размещает их в связный...

Добавить элемент в конец массива
Всем привет! Есть пример кода &quot;Удалить все элементы с четными индексами&quot; Как сделать, чтоб...

Функция: посчитать сумму элементов динамического массива, перераспределить память и добавить сумму в конец
функция считает сумму элементов массива, перераспределяет память и добавляет сумму в конец, при...

Добавить один элемент в заданную позицию динамического массива
Помогите пожалуйста с кодом, нужно добавить заданный элемент, в заданную позицию в динамическом...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru