有簡化這個邏輯沒有明確的辦法,畢竟這個過程是它是什麼,除非你切換到SQLite的SQL方法(見我的答案的後半部分)。如果有很多代碼,只要易於閱讀和理解,並不重要。我會用它自己的方法或類來保持它的整潔。
在您的代碼的主體中使用文字值(如20,24,& 30)絕不是一個好主意,它有可能在未來某個時間點發生變化。當你需要改變它們時,很難找到它們,並且很容易錯過某些東西,最終得到一個很難找到的錯誤。如果這些值很少發生變化,最簡單的方法是將所有這些常量值定義爲static final,無論是在您使用它們的類的頂部,還是在另一個靜態類中。例如:
private static final int AGE_THRESHOLD_1_MIN = 20;
private static final int AGE_THRESHOLD_1_MAX = 24;
private static final int PUSHUPS_THRESHOLD_1_MIN = 20;
private static final int PUSHUPS_THRESHOLD_1_MAX = 30;
...
if (age >= AGE_THRESHOLD_1_MIN && age <= AGE_THRESHOLD_1_MAX){
if pushups >= PUSHUPS_THRESHOLD_1_MIN && pushup <= PUSHUPS_THRESHOLD_1_MAX){
}}
然後,當你需要改變這些值,你已經得到了他們於一身,很容易找到,地點。另一種方法是將它們存儲在您在運行時讀入的XML文件中(例如添加到資產)。這兩種方法當然都需要在數值發生變化時進行新的構建。
如果你想要更多的靈活性(和避免重建應用程序的需要),就可以將它們存儲在共享偏好(如果值存儲在共享偏好設置使用,否則使用靜態最終)。然後,您可以在應用中選擇一個選項來調整要保存到Shared Prefs的閾值,這將在會話之間保持不變。
這也可以在SQLite數據庫配置。例如一個年齡表來保存每個年齡範圍:
Table Age (age_id INT, minimum INT, maximum INT)
1 | 20 | 24
2 | 25 | 29
3 | 30 | 34
然後,俯臥撐表,其得分俯臥撐給定的範圍內,對於特定的年齡範圍。請注意,age_id列是回到Age表的外鍵。
Table PushUps (pushup_id INT, age_id INT, minimum INT, maximum INT, score INT)
1 | 1 | 20 | 30 | 100
2 | 1 | 31 | 40 | 200
3 | 2 | 20 | 25 | 120
4 | 2 | 26 | 34 | 240
然後,您可以使用此查詢來獲取分數的人年齡在22歲誰做俯臥撐35,這將返回200
SELECT score
FROM PushUps p
INNER JOIN Age a
ON a.age_id = p.age_id
WHERE 22 >= a.minimum AND 22 <= a.maximum
AND 35 >= p.minimum and 35 <= p.maximum
我覺得這是最好的解決方法。如果您的應用程序中尚未使用SQLite數據庫,則由您決定是否值得配置一個SQLite數據庫。像SQLite這樣的關係數據庫是一個強大的工具,值得研究,如果你以前沒有這樣做。
因此,沒有辦法使用類似數據庫的東西來保存信息並在本地引用它? – JDSlimz
毫無疑問,請參閱我的編輯。我之前沒有提到它,因爲建立它需要更多的工作,但這樣做可能是一項有價值的投資。 – NigelK