3つのフィールドがあるとしましょう。これは擬似コードです。このデリゲート関数を3つのテキスト領域すべてにアタッチします。
// Take 3 fields
FieldA, FieldB, FieldC
// Total target to reach
TotalTarget = 100
// The total we currently have
total = FieldA + FieldB + FieldC
// Work out how much we are under by.
// If positive, we are under. If negative, we are over.
underBy = TotalTarget - total
// Now two variables for the 'other two' fields.
if sender == FieldA:
other1 = FieldB, other2 = FieldC
if sender == FieldB:
other1 = FieldA, other2 = FieldC
if sender == FieldC:
other1 = FieldA, other2 = FieldB
// Split the difference and assign to other 2 fields so they are raised or lowered the same amount.
// If under, add, if over, subtract.
other1 = other1 + overBy / 2
other2 = other2 + overBy / 2
// This will add 1 or 0 to other2 (i.e. compensate for round-down)
other2 = other2 + overBy % 2;
整数除算を使用すると、丸めの問題が発生します。ヒント:奇妙な場合は、フィールドの1つに1つ追加できます。
必ずテストを作成してください。私はこれを試していませんが、うまくいくはずです。