С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
1

Можно ли создать список содержащий элементы типа string?

02.12.2020, 19:13. Показов 1006. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пробовал вот так, но выдает ошибку
C#
1
 public static var Statistic = new List <string> ();
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2020, 19:13
Ответы с готовыми решениями:

Создать класс вектор, содержащий элементы типа long double, размерность вектора
срочно!!!!!!!!!!! Пожалуйстаааа Задание 3. Создать класс вектор, содержащий элементы типа long...

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

Посмотрите объявление вектора и попытайтесь создать динамический массив, содержащий элементы типа char
#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { vector&lt;int&gt; DynArrNums...

создать односвязный список на Си, содержащий элементы 12, 93,301. Удалить из этого списка 93.
создать односвязный список на Си, содержащий элементы 12, 93,301. Удалить из этого списка 93

18
1 / 1 / 0
Регистрация: 09.05.2020
Сообщений: 60
02.12.2020, 19:17 2
C#
1
public static List <string> Statistic = new List <string> ();
но public static практика плохая.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
02.12.2020, 19:22  [ТС] 3
Gagarin23, Почему плохая практика?
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
02.12.2020, 19:46  [ТС] 4
Gagarin23, Вот он что выдает на эту строку. Я так вроде пробовал
Миниатюры
Можно ли создать список содержащий элементы типа string?  
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
02.12.2020, 19:52  [ТС] 5
А всё понял в чём проблема

Добавлено через 2 минуты
Gagarin23, Просто я создаю множество экземпляров классов и помещаю их в массив. И мне нужно чтобы list не занулялся постоянно. И поэтому я не нашёл ничего умнее как просто сделать список статичным, насколько мне известно статические переменные постоянны и не зависит от экземпляров класса.
0
Модератор
Эксперт .NET
15858 / 11005 / 2855
Регистрация: 21.04.2018
Сообщений: 32,348
Записей в блоге: 2
02.12.2020, 19:58 6
Цитата Сообщение от danhiroman Посмотреть сообщение
Вот он что выдает на эту строку. Я так вроде пробовал
Не хватает юсинга.
Слева вверху возле всплывшего сообщения видите маленький квадрат с жёлтым кружком и стрелкой вниз.
Это "Быстрые решения".
Кликаете на них.
Выйдет подсказка с нужным юсингом.

Добавлено через 57 секунд
Цитата Сообщение от danhiroman Посмотреть сообщение
Просто я создаю множество экземпляров классов и помещаю их в массив. И мне нужно чтобы list не занулялся постоянно. И поэтому я не нашёл ничего умнее как просто сделать список статичным, насколько мне известно статические переменные постоянны и не зависит от экземпляров класса.
Ккая-то абра-катабра...
Совершено не понял чего вы там создаёте.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
02.12.2020, 20:08  [ТС] 7
Элд Хасп, Да спасибо, я загуглил уже.

Добавлено через 10 минут
Элд Хасп, Такс попробую сформулировать как человек. Попробую на примере объяснить. Имеется следующий код.
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
    class Voin
    {
        public static string[] Pynkt = { "0", "0" };
 
    }
        class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите количество военных");
            int count = Convert.ToInt32(Console.ReadLine());
            
            Voin[] Soldiers = new Voin[count];
            for (int i=0;i<count; i++)
            {
                if (i % 7 == 0) Soldiers[i] = new Voin(importance: true);
                else Soldiers[i] = new Voin();
            }
 
                for (int i = 0; i < count; i++)
            {
                Soldiers[i].ChangePrikaz();// в этом есть та самая переменная Pynkt и она тут меняется
            }
}
}
Правильно ли я понимаю, если бы у меня переменная Pynkt не была статической, то для каждого вызванного метода ChangePrikaz, всегда бы Pynkt={"0","0"}, а поскольку она у меня статическая то она изменяется постоянно.
0
Модератор
Эксперт .NET
15858 / 11005 / 2855
Регистрация: 21.04.2018
Сообщений: 32,348
Записей в блоге: 2
02.12.2020, 20:25 8
Цитата Сообщение от danhiroman Посмотреть сообщение
Правильно ли я понимаю, если бы у меня переменная Pynkt не была статической, то для каждого вызванного метода ChangePrikaz, всегда бы Pynkt={"0","0"}, а поскольку она у меня статическая то она изменяется постоянно.
Нет, не правильно.

Есть члены экземпляра и члены объекта.
Члены объекта объявляются как статические.
Они создаются в единственном числе.
И для обращения к ним надо указать только тип в котором они объявлены.

Члены экземпляра создают отдельно для каждого экземпляра.
И для обращения к ним надо обращаться через созданный экземпляр.

В вашем коде, у типа Voin есть метод экземпляра ChangePrikaz изменяющий в статическом поле список Pynkt.
Этот список один для всего приложения.
И его может изменить любой желающий.

Поэтому все солдаты работают с одниv списком. И даже больше, все экземпляры воина тоже будут менять этот единственный список.

Если вы у поля уберёте модификатор static, то это поле станет членом экземпляра.
Оно будет создаваться для каждого экземпляра.
И каждый воин будет иметь свой независящий от других воинов список Pynkt.


Ещё пара замечаний:
- Публичные поля это атавизм ранних версий C#. В современном C# поля используются только приватные. Для публичных значений надо создавать свойства.
- Соблюдайте Правила именованияю В данном коде - имена должны быть осмысленными английскими выражениями, сочетаниями слов.
- так же полено будет прочитать Рекомендации по программированию Net
1
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
02.12.2020, 20:31  [ТС] 9
Элд Хасп, Ну я вроде это и имел ввиду всё то, что вы написали, только на своём "обезьяньем". Я и добивался такой цели, чтобы все экземпляры воина работали с одним Pynkt. И по этой же причине, я и хочу создать static список, чтобы также все экземпляры воина записывали данные только в один список.
0
Модератор
Эксперт .NET
15858 / 11005 / 2855
Регистрация: 21.04.2018
Сообщений: 32,348
Записей в блоге: 2
02.12.2020, 21:24 10
Цитата Сообщение от danhiroman Посмотреть сообщение
И по этой же причине, я и хочу создать static список, чтобы также все экземпляры воина записывали данные только в один список.
Тогда логичнее сделать метод ChangePrikaz тоже статическим.
А список сделать свойством "только для чтения".
C#
1
2
3
4
5
6
7
8
9
    class Voin
    {
        public static string[] Pynkt {get;} = { "0", "0" };
 
        public static void ChangePrikaz(Voin voin) // Если в методе нужны данные конкретного воина.
        {
             ------------
        }
    }
Так же распространённым в Net является создание специальных коллекций.
Для примера:
C#
1
2
3
4
5
6
7
8
9
public class Squad : List<Voin>
{
        public string[] Pynkt {get;} = { "0", "0" };
 
        public void ChangePrikaz(Voin voin) // Если в методе нужны данные конкретного воина.
        {
             ------------
        }
}
В результате вы получаете единицу ОТРЯД в которой все Воины работают с одним приказом.
И вы можете создать несколько отрядов у каждого из которых будет свой приказ.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
03.12.2020, 14:08  [ТС] 11
Элд Хасп, Добрый день. А есть ли возможность передать массив объектов в статический метод? Просто не хочется постоянно писать цикл for, а то их слишком много у меня получается в main.
C#
1
2
3
4
            for (int i = 0; i < count; i++)
            {
                Soldiers[i].InfoAboutSoldier();
            }
0
Модератор
Эксперт .NET
15858 / 11005 / 2855
Регистрация: 21.04.2018
Сообщений: 32,348
Записей в блоге: 2
03.12.2020, 15:05 12
Цитата Сообщение от danhiroman Посмотреть сообщение
А есть ли возможность передать массив объектов в статический метод? Просто не хочется постоянно писать цикл for, а то их слишком много у меня получается в main.
Конечно.
Но обычно параметр метода типизируется нужным интерфейсом:
  • IList<T> - коллекция с целочисленными индексами (в том числе массивы);
  • ICollection<T> - коллекция с возможностью её изменения;
  • IEnumerable<T> - просто неизменяемая последовательность. Доступ к членам по циклу foreach.

В зависимости от логики метода задаёте разный интерфейс.

Допустим:
C#
1
2
3
4
5
6
7
8
9
10
11
    class Voin
    {
 
        public static void ChangePrikaz(IEnumerable<Voin> squad)
        {
             foreach(Voin voin in squad)
             {
                  // Здесь работаете последовательно с каждым voin
             }
        }
    }
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
03.12.2020, 16:37  [ТС] 13
Элд Хасп, Можно ли в эту тему скинуть итоговый код того, что я нарешал или нужно отдельную тему создать? И Вы дадите свою оценку по коду, совсем плохо или терпимо.
0
Модератор
Эксперт .NET
15858 / 11005 / 2855
Регистрация: 21.04.2018
Сообщений: 32,348
Записей в блоге: 2
03.12.2020, 16:40 14
Цитата Сообщение от danhiroman Посмотреть сообщение
Можно ли в эту тему скинуть итоговый код того, что я нарешал или нужно отдельную тему создать?
Скидывайте сюда.
Этот же код связан с вопросом топика.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
03.12.2020, 16:45  [ТС] 15
Элд Хасп, Сильно не бейте ток). Я помню, что вы писали про наименование переменных, но пока не могу полностью от привычки транслита отойти. И по поводу, что поля нужно делать приватными тоже помню, но когда они приватные, я не мог ими оперировать в методе VxodVPunkt() , а как передать их не придумал.

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
    public class Voin
    {      
        public bool importancevalue;        
        public string name;
        public string zvanie;
        public string prikaz;
        public Voin(string imena, string runk, string work, bool importance = false, string ukaz = "Идти в разведку")
        {
            if (importance == false)
            {
                importancevalue = false;
                name = imena;
                zvanie = runk;
                prikaz = work;
            }
            else
            {
                importancevalue = true;
                name = imena;
                zvanie = runk;
                prikaz = ukaz;
            }
        }
 
        public void InfoAboutSoldier()
        {           
            Console.WriteLine(name + "\t" + zvanie + "\t" + prikaz + "\t" + importancevalue);
        }         
    }
    public static class PynktSvz
    { 
        static string[] Pynkt = { "0", "0" };
        static int counterRidovoi = 0;
        static int counterEfreitor = 0;
        static int counterSergant = 0;
        static int counterCapitan = 0;
        static List<string> Statistic = new List<string>();
        static void VxodVPunkt(Voin soldier, string[] runk)
        {
            if (soldier.importancevalue == false)
            {
                if (Array.IndexOf(runk, Pynkt[0]) < Array.IndexOf(runk, soldier.zvanie) || Pynkt[0] == "0") //у военного выше или нет приказа
                {
                    Pynkt[0] = soldier.zvanie;
                    Pynkt[1] = soldier.prikaz;
                    Statistic.Add(Pynkt[1]);
                    soldier.prikaz = "Нет приказа";
                }
                else if (Array.IndexOf(runk, Pynkt[0]) > Array.IndexOf(runk, soldier.zvanie)) //в пункте звание выше
                {
                    soldier.prikaz = Pynkt[1];
                    Pynkt[0] = "0";
                    Pynkt[1] = "Нет приказа";
                    Statistic.Add(Pynkt[1]);
                }
            }
            else
            {
                Pynkt[0] = soldier.zvanie;
                Pynkt[1] = soldier.prikaz;
                Statistic.Add(Pynkt[1]);
                soldier.prikaz = "Нет приказа";
                soldier.importancevalue = false;
            }
        }
        public static void AllSoldiersCome(IEnumerable<Voin> squad, string[] runk)
        {
            foreach (Voin voin in squad)
            {
                VxodVPunkt(voin,runk);
                if (voin.zvanie == "Рядовой ") counterRidovoi++;
                else if (voin.zvanie == "Ефрейтор") counterEfreitor++;
                else if (voin.zvanie == "Сержант ") counterSergant++;
                else counterCapitan++;
            }
            Console.WriteLine("\nПорядок изменения приказов в пункте связи\n");
            ShowStatistic();
        }
        
        static void ShowStatistic()
        {   
            Statistic.Add("Количество военных посетивших пункт связи:"+ (counterRidovoi + counterEfreitor + counterSergant + counterCapitan));
            Statistic.Add("Рядовых:"+counterRidovoi);
            Statistic.Add("Ефрейторов:" + counterEfreitor);
            Statistic.Add("Сержант:" + counterSergant);
            Statistic.Add("Капитанов:" + counterCapitan);
            foreach (string i in Statistic)
            {
                Console.Write(i+"\n");
            }
        }
    }
 
 
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            string[] imena = { "Артём", "Андрей", "Алексей", "Илья", "Валерий", "Вова", "Денис", "Дмитрий" };
            string[] familia = { "Макшаев", "Федин", "Павлов", "Суслов", "Круглов", "Мельник", "Гараев", "Фомин" };
            string[] runk = { "Рядовой ", "Ефрейтор", "Сержант ","Капитан " };
            string[] work = { "Уборка казарм", "Готовка еды", "Чистка оружия", "Стрельбище", "Испытания" };
            Start:
            Console.WriteLine("Введите количество военных. Максимально возможное число не может превышать 30.");
            string counter = Console.ReadLine();
            uint res;
            if (uint.TryParse(counter, out res))
            {
                int count = Convert.ToInt32(counter);
                if (count <= 30)
                {
                    Voin[] Soldiers = new Voin[count];
                    for (int i = 0; i < count; i++)
                    {
                        if (i % rnd.Next(5,8) == 0)
                            Soldiers[i] = new Voin(imena[rnd.Next(0, imena.Length)] + "\t" + familia[rnd.Next(0, familia.Length)], runk[rnd.Next(0, runk.Length)], work[rnd.Next(0, work.Length)], importance: true);
                        else
                            Soldiers[i] = new Voin(imena[rnd.Next(0, imena.Length)] + "\t" + familia[rnd.Next(0, familia.Length)], runk[rnd.Next(0, runk.Length)], work[rnd.Next(0, work.Length)]);
                    }
                    Console.WriteLine("\nВоенные до посещения пункт связи");
                    for (int i = 0; i < count; i++)
                    {
                        Soldiers[i].InfoAboutSoldier();
                    }
 
                    PynktSvz.AllSoldiersCome(Soldiers, runk);
 
                    Console.WriteLine("\nВоенные после того как прошил пункт связи");
                    for (int i = 0; i < count; i++)
                    {
                        Soldiers[i].InfoAboutSoldier();
                    }
                }
                else
                {
                    Console.WriteLine("Число слишком большое. Введите пожалуйста другое.");
                    goto Start;
                }
            }
            else
            {
                Console.WriteLine("Вы ввели неверный формат числа.Повторите ввод.");
                goto Start;
            }
 
 
        }
    }
0
Модератор
Эксперт .NET
15858 / 11005 / 2855
Регистрация: 21.04.2018
Сообщений: 32,348
Записей в блоге: 2
03.12.2020, 17:24 16
Цитата Сообщение от danhiroman Посмотреть сообщение
Сильно не бейте ток).
Токо чуток...

В современном C# не используются публичные поля.
Это атавизм ранних версий.
Используйте вместо них публичные свойства.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
03.12.2020, 17:43  [ТС] 17
Элд Хасп, Ну не считая public полей и наименований, в остальном более менее терпимо?
0
Модератор
Эксперт .NET
15858 / 11005 / 2855
Регистрация: 21.04.2018
Сообщений: 32,348
Записей в блоге: 2
03.12.2020, 17:58 18
Цитата Сообщение от danhiroman Посмотреть сообщение
Ну не считая public полей и наименований, в остальном более менее терпимо?
Я же не могу оценить логику.
Поэтому могу написать только о внешних признаках.

О static членах вам писали.
Статическими могут быть только методы.
Вместо статического класса PynktSvz вам надо создать экземпляр этого класса и работать с ним.
Но вы не захотели так делать.

Мне не нравится передача массива в метод.
Допустим, в методе VxodVPunkt(Voin soldier, string[] runk) вы только находите индекс элемента.
Для этого лучше передавать IList: VxodVPunkt(Voin soldier, IList<string> runk).
И проверять методом IndexOf().

Но в данном случае, даже сам этот массив со строками неоднозначен.
Вы там храните звания.
Звания - это постоянный список.
Для него лучше всего подойдёт перечисление.
И сравнивайте их потом по значению как целые числа.


goto - тоже вызывает большие сомнения.
Я не пишу, что его запрещено использовать, но использовать его можно только ограниченно, в действительно необходимых случаях.
И то когда метка находится в пределах 5-10 строк от оператора.
В данном же случае его использование совершено не нужно.
Здесь должен быть цикл.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
03.12.2020, 18:05  [ТС] 19
Элд Хасп, Окей, спасибо огромное за помощь
0
03.12.2020, 18:05
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2020, 18:05
Помогаю со студенческими работами здесь

Для данного списка L создать список L1, содержащий те же элементы, но в обратном порядке
Используйте линейный списки для хранения последовательности чисел. Описать функцию или процедуру,...

Cписок: Создать список, содержащий элементы общие для двух двунаправленных списков
Создать список содержащий элементы общие для двух двунаправленных списков Добавлено через 4 часа...

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

Создать двусвязный список, содержащий целые числа. Удалить все максимальные элементы
Создать двусвязный список, содержащий целые числа. Удалить все максималь* ные элементы. Например,...

Создать файл записного типа, содержащий информацию об учениках Фамилия, Имя, Отчество, Пол, Дата рождения, Курс. Распечатать список учеников, фамилии
Создать файл записного типа, содержащий информацию об учениках Фамилия, Имя, Отчество, Пол, Дата...

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru