Как рандомизировать, а затем разбить ArrayList <String>на два четных ArrayList - PullRequest
4 голосов
/ 02 июня 2011

Я практически не знаю Java, но я пытаюсь выучить некоторые для этого проекта. Я пытаюсь изменить программу под названием GyaPickupBot, которая по сути является ботом «забрать игру» на IRC, где игроки могут напечатать:! Add, чтобы добавить в список игроков, которые хотят играть в игру, и достаточно игроков! Add бот объявляет IP-адрес игрового сервера (то есть сервера Quake), на котором будет проходить игра. прямо сейчас, когда указанное количество игроков! add и игра запускается, бот перечисляет только тех игроков, которые добавили! до того, как было достигнуто максимальное количество игроков. Я бы хотел разделить всех игроков, которые добавили!, На 2 случайные команды одинакового размера. Я уже сделал случайную часть, используя Collections.shuffle, но я не знаю, как разделить игроков на 2 команды одинакового размера. Я написал автору по электронной почте несколько недель назад, и он, наконец, ответил сегодня утром с очень смутными намеками на то, как это сделать:

Ну ... в настоящее время у меня нет особой мотивации поддерживать этот код. Я могу только предложить вам несколько советов.

private boolean handleReady(String channel, String sender, String login, String hostname, String message) {
boolean isUpdate = false;
String readyGameID = mgr.getReadyGameID();
if (null != readyGameID) {
// *** add some code here to choose teams and store that result to string variable. something like: "team1: ,,,, team2: ,,,,,"
// *** you can get players list by mgr.getPlayers(readyGameID) in order to divide players to 2 teams randomly 

for (String ch : getChannels()) {
sendMessage(ch, mgr.getPickupReadyString(readyGameID));
// sendNotice(ch, mgr.getPickupReadyString(readyGameID));
// *** then, send that string to channel
}
mgr.setLastGame(Calendar.getInstance().getTimeInMillis(), mgr.getPickupReadyString(readyGameID));
ArrayList<String> players = mgr.getPlayers(readyGameID);
for (String nick : players) {
sendNotice(nick, mgr.getPickupReadyPMString(readyGameID));
// *** and send that string to players too
}
isUpdate = mgr.clearPlayers(players);
}
return isUpdate;

Я знаю, что это, вероятно, больше, чем то, о чем здесь говорится, но я действительно пытаюсь выучить это, но я не могу понять это, и любая помощь будет оценена

1 Ответ

6 голосов
/ 02 июня 2011

Код ниже не протестирован, но должен дать вам представление о том, как действовать. Удачи.

// retrieve all players
ArrayList<String> players = mgr.getPlayers(readyGameID);
// randomize the list
Collections.shuffle(players);
// instantiate two arraylists for the teams
ArrayList<String> teamRed = new ArrayList<String>();
ArrayList<String> teamBlue = new ArrayList<String>();

// add the first half of players to teamRed
teamRed.addAll(players.subList(0, players.size() / 2 + players.size()%2));
// and the second half to teamBlue
teamBlue.addAll(players.subList(players.size() / 2 + players.size()%2, players.size()));

// now do whatever you need to do with the two teams
...