-1

したがって、キーボードが数字パッドであるため、ユーザーが数字のみを入力できる3つのテキストフィールド(A、B、C)があります。

ユーザーが各ボックスに 100 を超える値を入力しようとするとエラーが発生するチェック (ここでユーザーが整理してくれました) があります。

テキストフィールドに入力された数値を見て、3 つの合計を見て、それに応じて他の数値を調整するメソッドが必要です。

例として、次のように入力したとします。

例 1 A = 50 B が残りの 50 を埋めることを期待します

例 2 A =40 B=50 C=10

次に、A を 60 に変更します。合計は 120 になりました。B を見てから 20 を取りたいので、次のようにします。A=60 B=30 C=10

ユーザーが 2 つのテキストフィールドを持っていて合計 100 にしたいというシナリオを見たことがありますが、3 つ要求するスレッドは見たことがありません。

ありがとう

4

1 に答える 1

1

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つ追加できます。

必ずテストを作成してください。私はこれを試していませんが、うまくいくはずです。

于 2012-12-23T20:09:24.093 に答える