所以我正在为我的男女混合垒球队创建一个名册应用程序。联盟规则规定,如果两个男人连续击球,则必须有一个女孩跟随。如果男女比例不平衡,这会导致问题,例如,如果有 4 个女孩和 14 个男孩,则至少有一个女孩必须在同一击球顺序中击球两次才能满足“男”女孩的规则,然后她必须排在女孩队列的后面,所以下一次通过第二个女孩移动到第一个女孩的位置,第三个到第二个,依此类推。所以第三个或第四局我们在收据或其他东西的背面疯狂地写下修改后的击球顺序,因为我们试图跟踪谁在什么时候击球。
那么,我正在创建的应用程序的目的是允许用户输入击球顺序,按下一个按钮,然后查看该击球顺序外推,比如说,通过顺序四次(obv 用户可以决定多少),相应地移动阵容中的女孩。
到目前为止,该应用程序允许您添加玩家、设置他们的性别并按所需的顺序排列他们。这一切都在数据库中进行跟踪。现在我要“按下一个按钮,查看订单的 x 次”。我有什么工作,假设订单严格是“男男女”。但它无法处理其中的任何变化,例如,初始顺序是“guy girl guy guy”或“girl guy guy”。我编写的逻辑只是忽略了这一点,并将其更改为“男男女”。
我可以使用什么逻辑来正确处理任何初始击球顺序?
这是我的代码:
//pos == numerical position in the roster
public void computeKickingOrder() {
String TAG = "cKO";
// instantiate dbhandler
DatabaseHandler db = new DatabaseHandler(this);
// get all tasks
List<Player> players = db.getAllPlayers();
List<Player> guys = new ArrayList<Player>();
List<Player> girls = new ArrayList<Player>();
List<Player> theRoster = new ArrayList<Player>();
int pCount = players.size();
int cycles = 4;
Log.d(TAG, "Total Players: " + pCount);
Log.d(TAG, "Generating " + cycles + " runs through the order.");
//one cycle = guycount + guycount/2
//Iterator<Player> itr = players.iterator();
Iterator<Player> itr;
// first cycle through the whole roster and separate out guys and girls
// use cycles + 5 to ensure that there are plenty of players available in each list
for (int i = 0 ; i < cycles + 5 ; i++) {
itr = players.iterator();
while(itr.hasNext()) {
Player p = itr.next();
if(p.getGender().equals("M")) { guys.add(p); }
else { girls.add(p); }
}
}
Log.d(TAG, "guys.size(): " + guys.size());
Log.d(TAG, "girls.size(): " + girls.size());
//below code automatically creates guy guy girl order IGNORES that a girl might be first or second
int girlSpot = 0;
int guyKicks = 1;
int pos = 1;
for(int i=0; i<guys.size(); i++) {
if(guyKicks<3) {
Player p = guys.get(i);
p.setPos(pos);
theRoster.add(p);
guyKicks++;
Log.d(TAG, pos + " | " + p.getGender() + " | " + p.getName());
}
else {
guyKicks = 1;
Player p = girls.get(girlSpot);
p.setPos(pos);
theRoster.add(p);
girlSpot++;
Log.d(TAG, pos + " | " + p.getGender() + " | " + p.getName());
}
pos++;
}