Một hệ thống tôi đang xây dựng bao gồm một bộ thanh trượt UI (số lượng khác nhau) mỗi bộ có tỷ lệ 0-100. Theo thanh trượt, tôi có nghĩa là một giao diện người dùng nơi bạn lấy một yếu tố và kéo nó lên và xuống, giống như điều khiển âm lượng. Chúng được kết nối bằng một thuật toán đảm bảo chúng luôn có tổng số 100. Vì vậy, khi một thanh trượt được di chuyển lên, tất cả các thanh trượt khác di chuyển xuống, cuối cùng về không. Khi một người được chuyển xuống, những người khác di chuyển lên. Tại mọi thời điểm, tổng số phải là 100. Vì vậy, ở đây thanh trượt có các giá trị khác nhau, nhưng chúng có tổng số 100%:
----O------ 40
O---------- 0
--O-------- 20
--O-------- 20
--O-------- 20
Nếu thanh trượt đầu tiên sau đó di chuyển LÊN từ 40 đến 70, các thanh trượt khác phải di chuyển XUỐNG về giá trị (khi thanh trượt được kéo). Lưu ý ba thanh trượt thay đổi từ 20 thành 10 và một thanh trượt ở mức 0 vì nó không thể xuống thấp hơn.
-------O--- 70
O---------- 0
-O--------- 10
-O--------- 10
-O--------- 10
Tất nhiên khi bất kỳ thanh trượt nào đạt 0 hoặc 100, nó không thể di chuyển thêm nữa, đó là lúc đầu tôi thực sự bắt đầu đau. Vì vậy, nếu một thanh trượt di chuyển cao hơn, những cái khác di chuyển thấp hơn, nhưng khi bất kỳ trong số chúng đạt đến 0, chỉ những thanh còn lại chưa đạt đến 0 mới có thể di chuyển thấp hơn.
Tôi đang hỏi điều này ở đây vì câu hỏi này dành riêng cho thuật toán chứ không phải việc thực hiện. FWIW nền tảng là Android Java, nhưng điều đó không đặc biệt liên quan.
Cách tiếp cận tôi đã thực hiện với cú đâm đầu tiên của mình là tính toán phần trăm thay đổi của thanh trượt đã di chuyển. Sau đó tôi tách sự thay đổi đó và áp dụng nó (theo hướng khác) cho các giá trị thanh trượt khác. Tuy nhiên, vấn đề là bằng cách sử dụng tỷ lệ phần trăm và nhân, nếu bất kỳ thanh trượt nào về 0, nó không bao giờ có thể tăng trở lại từ 0 - kết quả cuối cùng của điều đó là các thanh trượt riêng lẻ bị kẹt ở mức 0. Tôi đã sử dụng các thanh trượt với phạm vi từ 0 - 1.000.000 để tránh các vấn đề làm tròn và điều đó có vẻ hữu ích, nhưng tôi chưa tạo ra một thuật toán xử lý tốt tất cả các tình huống.