2017-06-22 27 views
0

比較我想使用現有作爲開關的情況下數組元素而賦予恆定字符串值切換情況下如何輸入值從用戶與值陣列

我在資源字符串數組值,我用於顯示,和用戶從這些顯示值選擇,現在我想比較,我保存在共享偏好的輸入值,並且我在陣列資源的價值,我寫了這樣的事情,但它沒有工作

private static String activity; 
private static int result; 
activity = SharedPrefUtils.getActivityLevel(context); 

String[] activities 
= context.getResources().getStringArray(R.array.activity); 

switch (activity){ 
     //something like getting values from array 
     case activities[0]: 
      result = 0; 
      break; 
     case activities[1]: 
      result = 200; 
      break; 
     case activities[2]: 
      result = 300; 
      break; 
    } 

    return result; 
+0

爲什麼'靜態'?刪除它,它不會給你任何優勢... – Opiatefuchs

+0

從JDK7開始,你可以做[類似的東西](https://stackoverflow.com/questions/10240538/use-string-in-switch-case-in -java),它只是將它轉換爲帶有String.equals()的if/elseif塊。你使用什麼版本? – ZeldaZach

+0

你的問題還不清楚 - 你能舉一個這種方法的輸入和輸出的例子嗎? – assylias

回答

0

您可以將其轉換爲List而不是遍歷array,並使用indexOf獲取該元素的索引,例如:

String[] activities = context.getResources().getStringArray(R.array.activity); 
List<String> activitiesList = Arrays.asList(activities); 
int index = activitiesList.indexOf(activity); 

這就是javadoc說:

返回指定元素中第一次出現的索引 此列表,或-1,如果這列表不包含該元素。更多 正式返回最低索引i,使得(o == null?get(i)== null :o.equals(get(i)))或-1(如果沒有這樣的索引)。

因此,您可以將您的邏輯基於index值。

另一種方法是使用Map<Integer, String>並將Integer鍵傳遞給基於用戶選擇的值的方法。

+0

在我的情況下,我不想給常量字符串切換大小寫,我想要利用現有的數組來存儲我想用作開關盒的字符串值 – blackHawk

+0

在本例中,您不能使用動態數量的例子編寫開關,例數將取決於元素數量。所以,你應該使用'indexOf'調用或'for'循環。 –

+0

如果我正在做案例活動[0]:我得到了常量表達式所需的錯誤,雖然活動[0]返回字符串 – blackHawk

0

首先確保你的「活動」字符串和「活動」數組的項目返回你一些值。嘗試打印值來檢查。如果所有的人都回到你的值,那麼你可以用這種方式比較字符串:

if (activity.equalsIgnoreCase(activities[0]){ 
    Log.e("Matched" , "Yeah, it matched"); 
} 

可以匹配你的所有字符串值逐一這種方式。

+0

是的,但我想要通過開關塊進行動態選擇,就像我沒有給出「字符串」的情況下一樣,並且可以利用存儲該值的數組 – blackHawk

+0

在我的情況下,我不想給常量字符串切換大小寫,我想利用現有數組存儲我想用作開關的字符串值 – blackHawk

+0

然後在您的活動數組上運行一個循環,並通過equalsIgnoreCase方法比較活動數組的每個值與活動字符串的值。 –