2012-03-07 95 views
0

我陷入了一種奇怪的奇怪狀況。我有3套這樣的字符串用java中的變量引用一個變量

String set1q1="something"; //associated with randomNum=1 
String set1q2="something"; 
String set1q3="something"; 
String set1q4="something"; 
... and so on 

String set2q1="something"; //randomNum=2 
String set2q2="something"; 
String set2q3="something"; 
String set2q4="something"; 
... and so on 

String set3q1="something"; //randomNum=3 
String set3q2="something"; 
String set3q3="something"; 
String set3q4="something"; 
... and so on 

所有這些字符串只初始化一次。現在在我的程序中,我生成一個1-3之間的隨機數。我將這個隨機數轉換成一個字符串並將其存儲到一個名爲set的字符串中。

String set=randomNum.toString(); 

使用 「的if-else」 發送的數據(如果randomnum = 1發送set1q1-5,如果randomnum = 2,則發送set2q1-5),我要適當的數據是立即的下這一翻譯用一條線發送。

例如:如果選擇了隨機no2,則必須發送set2q1,其間的「2」必須是「set」(定義如上)的值。

set"set"q1 //where set can be 1,2,3 

有沒有辦法做到這一點?

+0

爲什麼你不使用數組或列表? – Juvanis 2012-03-07 09:14:36

+0

爲什麼不使用數組來保存每個「set」,並簡單地使用索引? – 2012-03-07 09:15:35

+0

@deporter:我會嘗試列表。這似乎是一個好主意。 HashMap也適合嗎? – Ashwin 2012-03-07 09:23:25

回答

6

你所要求的是不可能的; 這只是Java的工作方式。你爲什麼不使用數組或集合?

List<List<String>> allTheStrings = new ArrayList<List<String>>(); 

List<String> myStrings = null; 

// Add a subset 
myStrings = new ArrayList<String>(); 
myStrings.add("something"); 
myStrings.add("something"); 
myStrings.add("something"); 
allTheStrings.add(myStrings); 

// Add another subset 
myStrings = new ArrayList<String>(); 
myStrings.add("something"); 
myStrings.add("something"); 
myStrings.add("something"); 
allTheStrings.add(myStrings); 


... 

// Obtain one of the strings 
String str = allTheStrings.get(1).get(2); 

1.除非在這些變量是一類的成員的情況下,在這種情況下,你可以使用反射。但是,真的,不要。

+0

但你有沒有得到這個問題,他沒有提到他希望使用數組或列表。他要求一個變量名稱中的「變化部分」。好? – Juvanis 2012-03-07 09:17:51

+0

@deporter:我確實得到了問題。但這是正確的答案; OP需要被告知他/她想要的不是Java如何工作。 – 2012-03-07 09:18:15

+0

+1:這是應該做的,一個數據結構。儘管OP詢問了關於僞反射的問題,正如@OliCharlesworth提到的那樣 - 不。一個'HashMap'也可以在這裏工作以滿足OP的要求。 – Deco 2012-03-07 09:22:21

0

在我看來,你應該看看數組,像這樣:

String[] strings = new String[]{"xxx", "yyy", "zzz"}; 
String string = strings[randomNumber]; 
0

創建一個ArrayList代替,並使用列表索引

+0

他要求變量名稱中的變化部分。當然數組應該是首選。但問題是不同的。我會降低它,請刪除。 – Juvanis 2012-03-07 09:16:51

1

這是不可能的參考。局部變量標識符在編譯期間轉換爲數字(堆棧偏移量)。但是,無論如何,您應該使用數組或集合

1

聽起來就像您希望通過兩個索引來索引字符串。您應該使用二維字符串數組:String[][] strings。然後您可以訪問所需的字符串strings[n][m]

或者如果您需要2D陣列的尺寸動態增長,則可以使用List<List<String>> strings實現相同的效果。你訪問你需要strings.get(n).get(m)

值。如果你真的由組成的名稱,如set2q1來訪問你的字符串,那麼你只需要一個Map<String, String> strings。然後你可以訪問每個值strings.get("set" + m + "q" + n)

+0

使用Map有沒有影響 - 比如消費者內存或類似的東西。基本上我問的是散列圖意味着這一點 - 訪問您的對象使用字符串來引用它。 – Ashwin 2012-04-16 10:17:01

+0

開銷很小。集合類都有其獨特的品質和能力。您可以在任何時候使用Map來創建從一個域到另一個域的一組引用。例如'Map workplaceAddresses'或Map periodicTableOfElements'等 – Synesso 2012-04-16 21:42:45