Метод, который принимает неопределенное количество массивов
Некоторое время назад я играл с методами, использующими списки аргументов переменной длины (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;
Не заранее определяйте длину внутреннего массива массива - это сделает все дело.