Выбор случайных объектов из класса

#c# #class #if-statement #random

#c# #класс #if-оператор #Случайный

Вопрос:

Итак, я создал эти объекты из своего класса Player

 Player Silva = new Player("André Silva", 2, 5);
Player Moses = new Player("Victor Moses", 3, 3);
Player Batshuayi = new Player("Michy Batshuayi", 3, 4);
Player Medel = new Player("Gary Medel", 4, 4);
  

И тогда у меня есть объекты, созданные из моего класса Club
(Не беспокойтесь о значениях ни в одном из них, просто вещи, связанные с футболом, для тех, кто не знает)

 Club Barcelona = new Club("FC Barcelona", 5);
Club RealMadrid = new Club("Real Madrid", 5);
Club Inter = new Club("Inter", 4);
Club Liverpool = new Club("Liverpool", 4);
  

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

 int[] Playerability = {Silva.ability,Moses.ability,Batshuayi.ability,Medel.ability};
int[] Clubrating = { Barcelona.clubrating, RealMadrid.clubrating, Inter.clubrating};
  

Итак, я могу использовать простой random и поместить эту переменную в массив

 int randomclub = randomnumber.Next(16);
int randomplayer = randomnumber.Next(28);

if (Playerability[randomplayer] >= Clubrating[randomclub] ||
    Playerpotential[randomplayer] >= Clubrating[randomclub])
  

но это кажется очень неэффективным, если я хочу намного больше объектов, поэтому мне интересно, есть ли более простое решение для этого? Извините, если это очевидно, но, похоже, я не могу его найти. Язык c #, кстати

Комментарии:

1. Что означает Slump?

2. выбор случайного объекта

3. У вас есть ваши Player объекты в a List или an Array ?

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

Ответ №1:

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

Например, для вашего класса Player у вас было бы :

 public class Player
{
    // Static list keeping all your instances
    public static List<Player> players = new List<Player>();

    // Constructor
    public Player(/* Your different parameters */)
    {
        // Your class initialization

        players.Add(this);
    }

    // Rest of your class definition
}
  

Тогда у вас есть выбор. Вы можете добавить в свой класс статический метод для получения случайного элемента этого списка, например :

 public static Player GetRandomPlayer()
{
    Player player = players[randomnumber.Next(players.Length)];

    return player;
}
  

Или просто вызовите это в своем коде, выполнив :

 Player player = Player.players[randomnumber.Next(Player.players.Length)];
  

В конце концов, если вы также примените ту же идею для своего класса Club, ваш оператор if будет выглядеть следующим образом :

 Player player = Player.GetRandomPlayer();
Club club = Club.GetRandomClub();

if (player.ability >= club.clubrating || player.potential >= club.clubrating)
{
    // What you want to do at that point
}
  

Ответ №2:

Например, если вы поместите свои объекты Club и Player в List , вы могли бы сделать это:

 var listOfPlayers = new List<Player>() { Silva, Moses }; 
var listOfClubs = new List<Club>() { Barcelona, RealMadrid };

var randomPlayer = listOfPlayers[randomnumber.Next(listOfPlayers.Length)];
var randomClub = listOfClubs [randomnumber.Next(listOfClubs.Length)];

if (randomPlayer.ability >= randomClub.clubrating || 
    randomPlayer.potential >= randomClub.clubrating)
{
    //Do your stuff
}
  

То же самое работает, если вы помещаете свои объекты в массив. Суть в том, что вы можете работать с объектами и не сохранять свойства объектов в новых массивах.

Таким образом, вам просто нужно заполнить новые объекты Club и Player в соответствующие списки, и вам не нужно изменять остальную часть кода.

Комментарии:

1. Классное спасибо, попробую. Из любопытства, есть ли способ сделать это без использования списка или массива?