Взяв N ряд массивов и превратив его в многомерный массив с N строками JAVA - PullRequest
2 голосов
/ 11 сентября 2010

Я пытаюсь написать код, который превратит N массивов в многомерный массив с N строками. В настоящее время у меня есть код, который может превратить 2 массива в многомерный массив с 2 строками. Однако я не уверен, как изменить его, чтобы этот код занимал N массивов.

Кроме того, мой код в настоящее время может принимать только массивы одинакового размера. Тем не менее, он должен иметь возможность принимать массивы различной длины. Это повлечет за собой то, что строки в моем многомерном массиве не всегда будут равной длины. Мне сказали, что это означает, что список может быть более подходящим, чем массив. Однако я не знаком со списками.

Вот мой код в его нынешнем виде:

public class test5 {
    int [][] final23;

public int [][] sum(int [] x, int[] y)
{
final23= new int[2][x.length];
for (int i = 0; i < Math.min(x.length, y.length); i++)
{

    final23 [0][i] = x[i];
    final23 [1][i] = y[i];
}
return final23;
}

public void print()
{
for (int i = 0; i < final23.length; i++)
{
    for (int j = 0; j<final23[0].length; j++)
    {

        System.out.print(final23[i][j]+" ");
    }
    System.out.println();
}
}




public static void main(String[] args)
    {
        int l[] = {7,3,3,4};
        int k[] = {4,6,3};
        test5 X = new test5();

        X.sum(k,l);
        X.print();
    }
}

Спасибо заранее. Извините, я новичок в Java и только учусь.

Ответы [ 3 ]

1 голос
/ 11 сентября 2010

Многомерные массивы в Java не имеют одинакового размера - это просто набор массивов, расположенных в массиве, как и любой другой объект. если вы хотите, чтобы все они были одинакового размера, вам нужно найти максимальный размер и заполнить меньшие массивы каким-либо пустым значением или значением по умолчанию.

В любом случае, так как вы хотите скопировать некоторое количество N массивов, если вы принимаете разные длины, почему бы не использовать varargs:

public static int[][] toMulti(int[] ... args) {
 // you can't resize an array, so you have to size your output first:
 int[][] output = new int[args.length][];
 for (int i =0; i<args.length; i++)
 {
    output[i[=args[i].clone();

   //you could also do this copying 1 at a time, or with
   int[] arr =new int[args[i].length];
   System.arraycopy(args[i], 0, arr, 0, args[i].length);
   output[i]=arr;
 }

Если вы хотите изменить их размер до одного и того же размера, System.arraycopy будет лучше, так как вы создадите массив с максимальным размером, остальные значения будут автоматически равны нулю (или нулям для массивов объектов). *

1 голос
/ 11 сентября 2010
import java.util.Arrays;
class Arr
{
public static void main(String[] args)
{
 int[][] ar=toMulti(new int[]{1,2},new int[]{1,2,3},new int[]{5,6,7,8});
 System.out.println(Arrays.deepToString(ar));

/*OR You can directly declare 2d array like this if your arrays don't
come as user inputs*/
 int[][] arr={{1,2,3},{1,2},{3,4}};
  System.out.println(Arrays.deepToString(arr));
}    
   /* ... is known as variable argument or ellipsis.
      int[] ... denotes that you can give any number of arguments of the type int[]
      The function input that we get will be in 2d-array int[][].So just return it.*/
   public static int[][] toMulti(int[] ... args) {
    return args;

}
}
1 голос
/ 11 сентября 2010

Поскольку они могут быть разной длины, вам придется учитывать мертвые точки на матрице, возможно, используя шаблон Null Object . Инициализируйте каждый элемент в особый случай, который может обрабатываться равномерно, как и любой другой элемент.

Это мой совет, кстати, как это сделать с массивами. Коллекции несложные хотя.

...