我正在编写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 :(得分:2)
使用二维数组,因为这几乎就是你要做的事情。尽管你可以查找Java反射(尽管相关,但这里不是正确的设计工具。)
编译语言不会像这样工作。答案 1 :(得分:2)
您无法动态修改变量名称。但你可以改用数组:
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 :(得分:1)
您不能在Java中拥有动态变量名称。
相反,如何使用Map?
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));
答案 3 :(得分: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
答案 4 :(得分:0)
你所做的是非法的java。我必须在编译时知道变量名。
您可以做的是创建一个Map
,其中键是变量的名称(digitPart_1
...),条目是数组({16, 7,...}...
)。< / p>
在循环中,您可以通过Map
。