Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-使用不同变量类型的值参数调用方法_Java_Variables_Methods_Parameters - Fatal编程技术网

Java-使用不同变量类型的值参数调用方法

Java-使用不同变量类型的值参数调用方法,java,variables,methods,parameters,Java,Variables,Methods,Parameters,我有一堆变量声明为2D数组: int[][] array1 = {{}}; int[][] array2 = {{}}; etc.. 我目前正在使用一个方法调用另一个方法,其中一个变量作为带有开关的参数: public void invokeMethod(){ switch(variableNumber){ case 1: method(piece1); break; case 2: method(piece2); break; etc.. } }

我有一堆变量声明为2D数组:

int[][] array1 = {{}};
int[][] array2 = {{}};
etc..
我目前正在使用一个方法调用另一个方法,其中一个变量作为带有开关的参数:

public void invokeMethod(){
switch(variableNumber){
    case 1: method(piece1);
    break;
    case 2: method(piece2);
    break;
    etc..
  }
}
这感觉像是处理这个问题的一种非常愚蠢的方式,有更聪明的解决方案吗?也许将变量存储在数组中?如果我面对数千个2D数组,我想做的是使用不同数据类型的变量值调用该方法,如下所示:

String arrayToBeInvokedWith = "array1";

method(arrayToBeInvokedWith){
}
(是的,我知道这太简单了,但你可以从中得到想法)

有类似的解决方案吗?非常感谢您的反馈


编辑:所有数组都具有相同的大小。

而不是声明一组单独的数组

编写一个封装二维数组实例的类

如果然后使用类型为特殊数组类的泛型集合,则可以将数组的所有实例放入单个集合中

然后,当需要对数组进行操作时,只需迭代集合即可

或者,如果必须将特定标识与每个2D数组对象关联,则将该标识关联为HashMap中对象的键。然后,当您需要对任何一个数组进行操作时,您可以使用其键从映射中检索它

代替

public void invokeMethod(){
    switch(variableNumber){
        case 1: method(piece1);
            break;
        case 2: method(piece2);
            break;
        :
        :
    }
}
你可以简单地使用

public <T extends MyArrayClass> void invokeMethod(String arrKey, HashMap<String,T>
        arrays) {
    T my2dArray = arrays.get(arrKey);
    method(my2dArray);
    :
    :
}
public void invokeMethod(字符串arrKey,HashMap
阵列){
T my2dArray=arrays.get(arrKey);
方法(my2dArray);
:
:
}

当遇到像您这样的问题时,解决方案通常是创建一个表示数据抽象的新类型。

您真的需要使用数组吗?可以使用HashMap存储引用一个数组的键。要获取一个数组,只需传递数组的键并获取它

HashMap<String, int[]> hashMap = new HashMap<String, int[]>();

int array1[] = {1, 2};
int array2[] = {2, 3};
int array3[] = {3, 4};

hashMap.put("array1", array1);
hashMap.put("array2", array2);
hashMap.put("array3", array3);

int arrayWanted[] = hashMap.get("array2");
HashMap HashMap=newhashmap();
int-array1[]={1,2};
int-array2[]={2,3};
int-array3[]={3,4};
hashMap.put(“array1”,array1);
hashMap.put(“array2”,array2);
hashMap.put(“array3”,array3);
int arrayWanted[]=hashMap.get(“array2”);

我认为您在设计上有问题。根据经验,方法的主体不应该知道它之外的范围,除非该范围以某种方式作为参数提供。如果您有一个在不同的
int[][]
上运行的方法,并且需要根据
对象的引用进行不同的操作,那么您应该传递第二个指定上下文的参数,然后在该方法内对该参数进行操作。太好了,这看起来太完美了!谢谢HashMap可能有些过分,但关键是定义一种数据类型,作为数据的抽象。您可以使用数组、列表或任何最适合您需要的东西。我想你不想做的是声明一堆2d数组,然后在它们上使用一个很大的开关。