Метод, который принимает неопределенное количество массивов

Некоторое время назад я играл с методами, использующими списки аргументов переменной длины (Java), которые были определены, как показано ниже

public static int[] makeArray (int... a) {
return a;
}

это глупая программа, но она будет принимать неопределенное количество целых чисел и создавать из них массив, чтобы все нижеприведенное вызывало один и тот же метод

makeArray(1);
makeArray(1,2);
makeArray(1,2,3);

Теперь я хочу создать метод, который будет иметь тот же эффект, но с использованием массивов вместо целых чисел. Я думал, что, возможно, это можно сделать, поместив массивы в двумерный массив, но я не уверен на 100%, возможно ли это, поскольку добавляемые массивы могут различаться по размеру. (может даже по этой причине это невозможно?). Но насколько я знаю, 2d массив - это единственный способ создать массив массивов.

Я пытался (обратите внимание, что это не то, что я использую для этого, я просто использовал это, чтобы экспериментировать, чтобы увидеть, как это сделать)

public static int countArrays(int[]... a) {
return a.length;
}

и это не скомпилировано.

Кто-нибудь может сделать какие-либо предложения?

для всех, кто заинтересован. То, что я хочу сделать, это создать метод, который будет принимать в X много массивов, а затем на основе этого цикла для циклов, так что он добавляет весь массив

например:

int[] sum = new int[a[0].length];
for (int i=0; i<a.length; i++){
for (int j=0; j<a[0].length; j++){
n[i] += a[i][j];
}}

2 ответа

Решение

Не уверен, почему вы говорите, что он не компилируется - следующий пример работает для меня (компилирует и печатает 2):

public static void main(String[] args) throws Exception {
    int[] i1 = new int[]{1,2,3};
    int[] i2 = new int[]{1,2,3};
    int count = countArrays(i1, i2);
    System.out.println(count);
}

public static int countArrays(int[]... a) {
    return a.length;
}

О том, что массивы могут отличаться по размеру. Вы можете использовать следующее:

int[][] b = new int[10][];
int[] c = new int[2];
int[] d = new int[2131231];
b[0] = c;
b[1] = d;

Не заранее определяйте длину внутреннего массива массива - это сделает все дело.

Другие вопросы по тегам