そこで、共学のソフトボール チームの名簿アプリを作成しています。リーグの規則では、男子が 2 人連続で打ったら女子が従わなければならない。これは、男子女子の比率がバランスが取れていない場合に問題を引き起こします。たとえば、女子が 4 人で男子が 14 人の場合、「男子男子」を満たすために、少なくとも 1 人の女子が同じ打順で 2 回打たなければなりません。女の子のルール、そして彼女は女の子のキューの後ろに置かれなければならないので、次回は2番目の女の子が最初の女の子のスポットに移動し、3番目の女の子は2番目の女の子のスポットに移動します。 4回、レシートか何かの裏に変更された打順を必死に走り書きし、誰がいつ打ったかを追跡しようとします。
次に、私が作成しているアプリの目的は、ユーザーが打順を入力してボタンを押すと、その打順が、たとえば 4 回にわたって外挿されることを確認できるようにすることです (明らかに、ユーザーは打順を決定できます)。 )、それに応じてラインナップ内の女の子を移動します。
これまでのところ、このアプリでは、プレーヤーを追加し、性別を設定し、希望する順序に並べることができます。これはすべてデータベースで追跡されます。これで、「ボタンを押して、注文を x 回見る」ことができます。注文が厳密に「男男女」であると仮定して、私が持っているものはうまくいきます。しかし、最初の順序が 'guy girl guy guy' または 'girl guy guy' のようなバリエーションを処理することはできません。私がコード化したロジックはそれを無視して、'guy guy girl' に変更します。
最初の打順を正しく処理するには、どのようなロジックを使用できますか?
これが私のコードです:
//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++;
}