2012-09-05 49 views
2

我在寫Java應用程序。動態修改數組名稱

這是我的代碼的示例:

int [] digitPart_1 ={16,7,9,8,5,6,}; 
int [] digitPart_2 ={1,77,98,86,5,6,}; 
int [] digitPart_3 ={166,7,49,84,55,6,}; 

for(int i = 0; i < mfl.size(); i++){ 
new DataProcessing(digitPart_+""+(i + 1)); 
} 

在我的設計現在每個部分(例如digitPart_1)須被傳遞,因爲0 + 1 = 1,1 + 1 = 2,即digitPart_1等但是這會導致編譯錯誤。它不允許我修改傳入的數組的名稱。 'mfl'並不重要,它應該存儲數字3.我只是想知道是否可以修改我動態傳遞的數據結構的名稱可以修改您傳遞給輸出流的字符串。

有關如何解決此問題的任何建議? 乾杯

+0

你能重新解釋你到底想要做什麼嗎?例如什麼是mfl? – arshajii

回答

2

你不能動態地修改varnames的名字。但你可以用數組代替:

int[][] digitPart = {{16,7,9,8,5,6}, {1,77,98,86,5,6}, {166,7,49,84,55,6}}; 

for(int i = 0; i < mfl.size(); i++){ 
    new DataProcessing(digitPart[i]); 
} 
2

使用二維數組,因爲這幾乎是你想要做的。雖然你可以查看Java反射(雖然相關的,這裏不是正確的設計工具),但編譯語言根本不會像這樣工作。

0

你在java中做了什麼是非法的。我必須在編譯時知道變量名稱。

您可以改爲創建Map,其中密鑰是變量的名稱(digitPart_1 ...),條目是數組({16, 7,...}...)。

在循環中,您可以通過Map訪問陣列。

1

在Java中不能有動態變量名稱。

相反,如何使用地圖?

Map<Integer, int[]> myMap = new HashMap<Integer, int[]>(); 

myMap.put(1 , {16,7,9,8,5,6,}); 
myMap.put(2 , {16,7,9,8,5,6,7}); 
... 

and then 

for (Integer i : myMap.keySet()) 
    new DataProcessing(myMap.get(i)); 
+0

爲什麼映射如果你的鍵是sequantal整數?數組更好 – gefei

+0

有效點@gefei ..地圖只是一個建議。數組數組有時會導致混淆。 – Kal

1

如果您使用的是字段而不是方法局部變量,則只能執行此操作。

int[] digitPart_1 = { 16, 7, 9, 8, 5, 6, }; 
int[] digitPart_2 = { 1, 77, 98, 86, 5, 6, }; 
int[] digitPart_3 = { 166, 7, 49, 84, 55, 6, }; 

public void foo() { 
    for (int i = 1; i <= 3; i++) { 
     try { 
      System.out.println(getClass() 
        .getDeclaredField("digitPart_" + i)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

但是,我建議重構你的代碼來使用數組的數組。

int[][] digitPart = { { 16, 7, 9, 8, 5, 6, }, { 1, 77, 98, 86, 5, 6, }, { 166, 7, 49, 84, 55, 6, } }; 
for (int i = 0; i < 3; i++) { 
    System.out.println(digitPart[i]); 
} 

更好的是我會用java集合來表示你的結構,除非你有特定的低內存需求。

Map<String, List<Integer>> digitPart = new HashMap<String, List<Integer>>(); 
digitPart.put("digitPart_1", Arrays.asList(16, 7, 9, 8, 5, 6)); 
digitPart.put("digitPart_2", Arrays.asList(1, 77, 98, 86, 5, 6)); 
digitPart.put("digitPart_3", Arrays.asList(166, 7, 49, 84, 55, 6)); 

digitPart.get("digitPart_2").get(2); // 98