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。我只是想知道我是否可以像你一样修改我动态传入的数据结构的名称修改您传递给输出流的字符串。

关于如何克服这个问题的任何建议?干杯

4

5 回答 5

2

使用二维数组,因为这几乎就是您想要做的。尽管您可以查找 Java 反射(虽然相关,但在这里不是合适的设计工具),但编译语言根本不能像这样工作。

于 2012-09-05T21:04:23.837 回答
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]);
}
于 2012-09-05T21:05:29.047 回答
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));
于 2012-09-05T21:06:47.083 回答
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
于 2012-09-05T21:08:35.590 回答
0

你所做的在java中是非法的。我必须在编译时知道变量名。

您可以做的是创建一个Map,其中键是变量的名称 ( digitPart_1...),条目是数组 ( {16, 7,...}...)。

在循环中,您可以通过Map.

于 2012-09-05T21:05:33.430 回答