Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Variadic Functions - Fatal编程技术网

具有二维数组的Java变量

具有二维数组的Java变量,java,arrays,variadic-functions,Java,Arrays,Variadic Functions,这个问题之所以留在这里是因为人们回答了这个问题,我的问题是我使用的API版本与我的文档不同步……事实上,你可以这样做 有没有办法在Java中使用二维数组作为需要数组vararg的参数的参数 我试图调用的函数是 public Long sadd(final byte[] key, final byte[]... members) { 我有一个二维字节数组(byte[][]data=blah) 但是如果我试着打电话 sadd(key,data); 我发现以下编译器错误: (无法通过方法调用转换将

这个问题之所以留在这里是因为人们回答了这个问题,我的问题是我使用的API版本与我的文档不同步……事实上,你可以这样做

有没有办法在Java中使用二维数组作为需要数组vararg的参数的参数

我试图调用的函数是

public Long sadd(final byte[] key, final byte[]... members) {
我有一个二维字节数组(byte[][]data=blah)

但是如果我试着打电话

sadd(key,data);
我发现以下编译器错误:

(无法通过方法调用转换将实际参数字节[]转换为字节[])


有没有办法将二维数组用作数组类型的vararg?

可以提供更多的代码,因为这是为我编译的

byte[][] data = new byte[1][];
byte[] key = new byte[1];

long sadd = sadd(key, data);

这是不可能的,因为编译器无法推断这两个维度。使用一维数组时,可以将数组的长度确定为辅助参数(非必需参数)的数量


e、 g:假设您的方法定义包括
n
强制参数,并且在运行时提供
m
更多参数。这些
m
参数将构成辅助参数数组。长度为
m
。对于二维数组,编译器必须为数组提供两个维度,以便:
dimension1*dimension2=m
以下内容适用于我。也许你没有做你认为你在做的事

@Test
public void test_varargs() {
   byte[] x = new byte[] { 1, 2, 3};
   byte[] y = new byte[] { 0, 1, 2};
   assertEquals(9L, sum(x,y));
   byte[][] z = new byte[][] { x,y };
   assertEquals(9L, sum(z));
}

public long sum(final byte[]... members) {
   long sum = 0;
   for (byte[] member : members) {
       for (byte x : member) {
         sum += x;
      }
   }
   return sum;
}

这里我使用二维数组作为var args参数,使用一维数组作为固定参数。如果这对您有帮助,请参考此代码!:)

这是一个2D数组,是一对一的想法。OP希望第二个维度是变量Ithink@user846476-这不会有任何区别。如果你不相信我们,你自己试试看。@user846476没关系。;)很酷,谢谢你让我知道。您每天都会学到一些新东西这不是不可能的-请参阅我们的其他答案。@user846476数组大小通常在运行时指定:
char[]chars=new char[string.length()]
class A {
    void show(int[] ax,int[]...arr) {
        for (int is : ax) {
            System.out.println(is);
        }
        for (int[] a : arr) {
            for (int i : a) {
                System.out.println(i);
            }
        }
    }
}
public class abc{
    public static void main(String[] args) {
        A a = new A();
        int[] arr1= new int[]{10,20};
        int[][] arr2 = new int[][] { { 10, 20 }, { 20, 20 }, { 30, 20 } };
        a.show(arr1,arr2);  
    }
}