#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
объекты в aList
или anArray
?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. Классное спасибо, попробую. Из любопытства, есть ли способ сделать это без использования списка или массива?