Ein System, das ich baue, enthält eine Reihe von UI-Schiebereglern (die Anzahl variiert) mit einer Skala von 0 bis 100. Mit Schieberegler meine ich eine Benutzeroberfläche, in der Sie ein Element greifen und es wie einen Lautstärkeregler nach oben und unten ziehen. Sie sind durch einen Algorithmus verbunden, der sicherstellt, dass sie immer 100 betragen. Wenn also ein Schieberegler nach oben bewegt wird, bewegen sich alle anderen nach unten und schließlich auf Null. Wenn einer nach unten bewegt wird, bewegen sich die anderen nach oben. Zu jeder Zeit muss die Summe 100 sein. Hier haben Schieberegler also verschiedene Werte, aber sie summieren sich zu 100%:
----O------ 40
O---------- 0
--O-------- 20
--O-------- 20
--O-------- 20
Wenn sich der erste Schieberegler dann von 40 auf 70 nach OBEN bewegt, müssen sich die anderen im Wert nach UNTEN bewegen (wenn der Schieberegler gezogen wird). Beachten Sie, dass drei Schieberegler von 20 auf 10 geändert wurden und einer bei Null blieb, da er nicht tiefer gehen kann.
-------O--- 70
O---------- 0
-O--------- 10
-O--------- 10
-O--------- 10
Wenn ein Schieberegler 0 oder 100 erreicht, kann er sich natürlich nicht weiter bewegen. Hier beginnt mein Kopf wirklich zu schmerzen. Wenn sich ein Schieberegler nach oben bewegt, bewegen sich die anderen nach unten, aber wenn einer von ihnen Null erreicht, können sich nur die verbleibenden, die noch nicht Null erreicht haben, nach unten bewegen.
Ich stelle dies hier, da diese Frage spezifisch für den Algorithmus und nicht für die Implementierung ist. FWIW die Plattform ist Android Java, aber das ist nicht besonders relevant.
Der Ansatz, den ich bei meinem ersten Stich gewählt habe, bestand darin, die prozentuale Änderung des sich bewegenden Schiebereglers zu berechnen. Ich habe diese Änderung dann aufgeteilt und (in die andere Richtung) auf die anderen Schiebereglerwerte angewendet. Das Problem ist jedoch, dass durch Verwendung von Prozentsätzen und Multiplikation, wenn ein Schieberegler auf Null kommt, dieser nie wieder von Null erhöht werden kann - das Nettoergebnis davon ist, dass einzelne Schieberegler bei Null stecken bleiben. Ich habe Schieberegler mit einem Bereich von 0 bis 1.000.000 verwendet, um Rundungsprobleme zu vermeiden, und das scheint hilfreich zu sein, aber ich habe noch keinen Algorithmus erstellt, der alle Szenarien gut handhabt.