Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
6 / 6 / 1
Регистрация: 07.08.2012
Сообщений: 69
.NET 4.x

Создать n классов и рандомно занести значения из массива

07.08.2012, 20:24. Показов 1575. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно задача:
Есть n спортсменов
Есть класс
C#
1
2
3
4
5
6
7
public class Sportsman
        {
            public bool win;
            public bool world_win;
            public string name;
 
        }
при нажатии кнопочки num_sportsmen должно создаться n классов (n берется из Convert.ToInt16(num.Text)) в которых рандомно name присваивается одно из значение массива
C#
1
2
3
String [] names = new String[10] {"Петя", "Вася", "Маша", 
                                              "Толя", "Саша", "Аня", 
                                              "Катя", "Гриша", "Миша", "Настя"};
Пробовал сделать
C#
1
2
3
4
5
Sportsman[] s = new Sportsman[n];
foreach (Sportsman i in s)
{
s.name = (names[Random(10)]);
}
не выходит... и мыслей уже вообще никаких, как еще реализовать...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.08.2012, 20:24
Ответы с готовыми решениями:

Как вывести рандомно значения массива
Как вывести рандомно значения массива я пробовал так но есть ошибка какая то: string arry = { "123", "133" }; ...

Как значения из одномерного массива вывести и рандомно выбрать одно из них
alexekoz, for (int n = a; n >= 1; n--) { if (a % n == 0) { ...

StringGrid: занести значения массива в таблицу 10х10 последовательно
как занести значения массива(случайные значения по закону распределения) в таблицу 10х10 последовательно(так как они числа генерируются(не...

17
 Аватар для Alex_Sabaka
638 / 499 / 77
Регистрация: 28.07.2010
Сообщений: 895
07.08.2012, 20:46
Всего-то одну букву поменять нужно.
C#
1
2
3
4
5
Sportsman[] s = new Sportsman[n];
foreach (Sportsman i in s)
{
/*HERE ----->*/s.name = (names[Random(10)]);
}
1
6 / 6 / 1
Регистрация: 07.08.2012
Сообщений: 69
07.08.2012, 21:57  [ТС]
Понял, что сбаранил: я пытался дать имя массиву, а не объекту оного...
C#
1
2
3
4
5
Sportsman[] s = new Sportsman[n];
foreach (Sportsman i in s)
{
s[i].name = (names[Random(10)]);
}
Так получилось выйти из ситуации..
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.08.2012, 21:59
Цитата Сообщение от this_is_xopowo Посмотреть сообщение
Так получилось выйти из ситуации..
Эм...?
Может все-таки так?
C#
1
i.name = (names[Random(10)]);
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
07.08.2012, 22:01
а так не пытался?
C#
1
2
3
4
5
6
Sportsman[] s = new Sportsman[n];
foreach (Sportsman i in s)
{
/*HERE ----->*/i.name = (names[Random(10)]);
//i - это  екземпляр Sportsman,ты же сам написал так
}
тебе же пальцем показали))

Добавлено через 21 секунду

Не по теме:

опаздываю как всегда)

1
6 / 6 / 1
Регистрация: 07.08.2012
Сообщений: 69
07.08.2012, 22:08  [ТС]
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
public class Sportsman
        {
            public int num_try;
            public Double[] tries = new Double[3];
            public void Try()
            {
                if (num_try < 3) 
                {
                    num_try += 1;
                    tries[num_try] = Random(20);
                    
                }
            }
 
            private double Random(int p)
            {
                throw new NotImplementedException();
            }
 
            public bool win;
            public bool world_win;
            public string name;
 
        }
 
        public void num_s_but_Click(object sender, EventArgs e)
        {
            int n,i;
            
            String[] names = { "Петя", "Вася", "Маша", "Толя", "Саша", "Аня", "Катя", "Гриша", "Миша", "Настя" };
            n = Convert.ToInt32(num_s.Value);
            Sportsman[] s = new Sportsman[n];
            for (i = 0; i < n; i++)
            {
                s[i] = new Sportsman();
                Random rand = new Random();
                s[i].name = names[rand.Next(names.Length)];
            }
            num_s2.Enabled = true;
            num_s2.Maximum = num_s.Value;
        }
 
        public void num_s2_ValueChanged(object sender, EventArgs e)
        {
            name_sportsman.Text = s[num_s2.Value].name;
        }
 
 
    }
пишет ошибку на кусочек
C#
1
name_sportsman.Text = s[num_s2.Value].name;
мол нет переменной s (ибо она локальная)
как её сделать глобальной?

Добавлено через 1 минуту
Цитата Сообщение от Noob.net Посмотреть сообщение
а так не пытался?
C#
1
2
3
4
5
6
Sportsman[] s = new Sportsman[n];
foreach (Sportsman i in s)
{
/*HERE ----->*/i.name = (names[Random(10)]);
//i - это  екземпляр Sportsman,ты же сам написал так
}
тебе же пальцем показали))

Добавлено через 21 секунду

Не по теме:

опаздываю как всегда)

нет, так не получается) пишет, что у i нет св-ва name))
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
07.08.2012, 22:12
Sportsman[] s = new Sportsman[n];
это напиши тут
C#
1
2
3
4
public class Sportsman
        {
            public int num_try;
            Sportsman[] s;//или выше или ниже) в классе,а не в методе
а потом создавай(не забудь) где нужно
1
6 / 6 / 1
Регистрация: 07.08.2012
Сообщений: 69
07.08.2012, 22:14  [ТС]
Так ведь переменная n генерится только при нажатии на кнопку, разве нет?
UPD. Да, как и сказал: не видит переменную n, а берется она из numericUpDown'а, потому ранее никуда не вставить..
UPD2. Добавил (без new ...) Все равно пишет, что нет такой переменной...
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
07.08.2012, 22:21
Цитата Сообщение от this_is_xopowo Посмотреть сообщение
нет, так не получается) пишет, что у i нет св-ва name))
Нет потому-что массив то ты создал,а объекты кто будет создавать?
C#
1
2
3
4
5
foreach (Sportsman i in s)
{
i = new Sportsman();//даже конструкторов нету..по рукам вас бить мало
i.name = (names[Random(10)]);
}
Добавлено через 1 минуту
переменную n сделай глобальной
C#
1
2
3
public class Sportsman
        {
            public int n; //....
Добавлено через 1 минуту
C#
1
Sportsman[] s;
создает пустой массив
Потом когда нужно напишешь
C#
1
s = new Sportsman[n];
1
6 / 6 / 1
Регистрация: 07.08.2012
Сообщений: 69
07.08.2012, 22: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
43
44
45
46
47
48
49
50
51
public class Sportsman
        {
            Sportsman[] s;
            public int n;
            public int num_try;
            public Double[] tries = new Double[3];
            public void Try()
            {
                if (num_try < 3) 
                {
                    num_try += 1;
                    tries[num_try] = Random(20);
                    
                }
            }
 
            private double Random(int p)
            {
                throw new NotImplementedException();
            }
 
            public bool win;
            public bool world_win;
            public string name;
 
        }
 
        public void num_s_but_Click(object sender, EventArgs e)
        {
            int i;
            
            String[] names = { "Петя", "Вася", "Маша", "Толя", "Саша", "Аня", "Катя", "Гриша", "Миша", "Настя" };
            n = Convert.ToInt32(num_s.Value);
            for (i = 0; i < n; i++)
            {
                s[i] = new Sportsman();
                Random rand = new Random();
                s[i].name = names[rand.Next(names.Length)];
            }
            num_s2.Enabled = true;
            num_s2.Maximum = num_s.Value;
        }
 
        public void num_s2_ValueChanged(object sender, EventArgs e)
        {
            name_sportsman.Text = s[num_s2.Value].name;
        }
 
 
    }
}


теперь нет не только s, но еще и n..
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
07.08.2012, 22:28
беру автомат в руки..
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
public class Sportsman
        {
            Sportsman[] s;
            public int num_try;
            public Double[] tries = new Double[3];
//вот так напиши
         
        public void num_s_but_Click(object sender, EventArgs e)
        {
            int i,n;
            
            String[] names = { "Петя", "Вася", "Маша", "Толя", "Саша", "Аня", "Катя", "Гриша", "Миша", "Настя" };
            n = Convert.ToInt32(num_s.Value);
           s = new Sportsman[n];
           //////////////////////////////
foreach (Sportsman i in s)
{
i = new Sportsman();
i.name = (names[Random(10)]);
}
//////////////////////////////
            num_s2.Enabled = true;
            num_s2.Maximum = num_s.Value;
        }
 
        public void num_s2_ValueChanged(object sender, EventArgs e)
        {
           if(s!=null)
            name_sportsman.Text = s[num_s2.Value].name;
        }
 
 
    }
}
1
6 / 6 / 1
Регистрация: 07.08.2012
Сообщений: 69
07.08.2012, 22:36  [ТС]
И вернулись к истоку:
начиная со строки 52, говорит мне студия (а это строка
C#
1
s = new Sportsman[n];
)
переменная s не найдена (не существует в текущем контексте).
про каждую след. s такое пишет. Т.е. 4 раза.
UPD. как это было с того момента, как я написал.

Добавлено через 3 минуты
Только что попробовал вынести
C#
1
            Sportsman[] s;
перед объявлением класса Sportsman.
Повыплывали новые ошибки, но зато переменная s виделась.
Значит внутри класса почему то будто тоже локальная..
0
25 / 22 / 15
Регистрация: 26.11.2011
Сообщений: 92
07.08.2012, 22:45
конечно могу ошибаться, а если так попробовать объявить:

C#
1
2
static Sportsman[] s;
            public static int n;
0
6 / 6 / 1
Регистрация: 07.08.2012
Сообщений: 69
07.08.2012, 22:52  [ТС]
Код
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
Sportsman[] s;
        public class Sportsman
        {
            
            public int num_try;
            public Double[] tries = new Double[3];
            public void Try()
            {
                if (num_try < 3) 
                {
                    num_try += 1;
                    tries[num_try] = Random(20);
                    
                }
            }
 
            private double Random(int p)
            {
                throw new NotImplementedException();
            }
 
            public bool win;
            public bool world_win;
            public string name;
 
        }
 
        public void num_s_but_Click(object sender, EventArgs e)
        {
            int n;
 
            String[] names = { "Петя", "Вася", "Маша", "Толя", "Саша", "Аня", "Катя", "Гриша", "Миша", "Настя" };
            n = Convert.ToInt32(num_s.Value);
            s = new Sportsman[n];
            //////////////////////////////
            foreach (Sportsman i in s)
            {
                Random rand = new Random();
                s[i] = new Sportsman();
                s[i].name = (names[rand.Next(10)]);
            }
            //////////////////////////////
            num_s2.Enabled = true;
            num_s2.Maximum = num_s.Value;
        }
 
        public void num_s2_ValueChanged(object sender, EventArgs e)
        {
            if (s != null)
                name_sportsman.Text = s[Convert.ToInt32(num_s2.Value)].name;
        }

Сделал так, теперь две ошибки в
C#
1
2
s[i] = new Sportsman();
                s[i].name = (names[rand.Next(10)]);
Пишет, что неявно преобразовываю int..
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.08.2012, 23:24
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
    public class Sportsman
    {
        public Sportsman()
            : this(string.Empty)
        {
        }
 
        public Sportsman(string name)
            : this(name, false, false)
        {
        }
 
        public Sportsman(string name, bool win, bool worldWin)
        {
            Name = name;
            Win = win;
            WorldWin = worldWin;
        }
 
        public string Name { get; set; }
        public bool Win { get; set; }
        public bool WorldWin { get; set; }
        
    }
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
using System;
 
namespace ConsApp_Sport
{
    class Program
    {
        static Random _random = new Random();
 
        static void Main(string[] args)
        {
            string[] names = {"Петя", "Вася", "Маша", "Толя", "Саша", "Аня", 
                                    "Катя", "Гриша", "Миша", "Настя"};
            const int quantity = 12;
 
            Sportsman[] sportsmens = new Sportsman[quantity];
            for (int i = 0; i < quantity; i++)
            {
                sportsmens[i] = new Sportsman(names[_random.Next(names.Length)]);
            }
 
            for (int i = 0; i < quantity; i++)
            {
                Console.WriteLine("Спортсмена под № {0} зовут: {1}", i + 1, sportsmens[i].Name);
            }
            Console.ReadKey();
        }
    }
}
Добавлено через 2 минуты
Чуть исправил код.

Добавлено через 16 минут
Цитата Сообщение от this_is_xopowo Посмотреть сообщение
Сделал так, теперь две ошибки в
Потому что i это не индекс, а объект.

Добавлено через 1 минуту
Ты вообще понимаешь, что делает foreach? s это коллекция, каждую итерацию с неё берётся один объект, в данном случае i. Вообще называй по-человечески всё сразу или ты сразу обфусцируешь код?

Добавлено через 1 минуту
C#
1
2
3
4
5
6
7
8
            //////////////////////////////
            foreach (Sportsman i in s)
            {
                Random rand = new Random();
                i = new Sportsman();
                i.name = (names[rand.Next(10)]);
            }
            //////////////////////////////
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
07.08.2012, 23:28
Цитата Сообщение от Casper-SC Посмотреть сообщение
Ты вообще понимаешь, что делает foreach?
Это моя ошибка.
Random надо бы высунуть оттуда.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.08.2012, 23:40
Цитата Сообщение от Noob.net Посмотреть сообщение
Это моя ошибка.
Random надо бы высунуть оттуда.
Ах да, вообще не обратил внимание на него. В классе Sportsmen вообще не должно быть никаких рандомов (я говорю в общем, а не про твою ошибку). Равносильно, что в классе StringBuilder были бы математические методы (в смысле так же логично).

Добавлено через 3 минуты
апдейт, текст менял несколько раз
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
08.08.2012, 00:03
Парень пытается что-то сделать,молодец,но почитай лучше какую-то книгу,ибо как вижу не один только я,многих основ не то что шарпа,а ООП ты не знаешь..//не в обиду,прими как совет
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.08.2012, 00:03
Помогаю со студенческими работами здесь

Все значения из одномерного массива занести в одну переменную
Приветствую:, есть такая проблемка, не знаю как решить, есть одномерный массив: $arr = array(); $q = &quot;SELECT id,...

Создать две процедуры заполнения одномерного массива целыми числами: рандомно и с клавиатуры
Создать две процедуры заполнения одномерного массива целыми числами: одну с использованием функции random и одну, где пользователь...

Рандомно вызвать методы из двух классов
У меня есть два класса - массив и список, в котором одноименные методы, и нужно рандомно сразу из двух классов вызывать методы с рандомными...

Задать значения полям массива классов
Подскажите, как написать следующую вещь: в бэйсике это выглядет примерно так: type ARR dim x as integer dim y as...

Создать иерархию классов массива чисел
Нужно создать программу иерархии классов массива чисел с использованием конструктора/деструктора. Длина массива и его элементы задаются...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru