我怎样才能缩短我的 Jagged(Ragged) 代码?

how can i make shorter my Jagged(Ragged ) code?

如何使用 for 循环编写更短的代码,可能吗?而不是写作;

    int array[][] = new int[10][];
    array[0] = new int[1];
    array[1] = new int[2];
    array[2] = new int[3];
    array[3] = new int[4];
    array[4] = new int[5];
    array[5] = new int[6];
    array[6] = new int[7];
    array[7] = new int[8];
    array[8] = new int[9];
    array[9] = new int[10];

这是我的代码;

    int array[][] = new int[10][];
    array[0] = new int[1];
    array[1] = new int[2];
    array[2] = new int[3];
    array[3] = new int[4];
    array[4] = new int[5];
    array[5] = new int[6];
    array[6] = new int[7];
    array[7] = new int[8];
    array[8] = new int[9];
    array[9] = new int[10];

    for (int i = 0; i < 10; i++){
        for (int j = 0; j < i + 1; j++) {
            array[i][j] = i + j;
        }
    }
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < i + 1; j++)
            System.out.printf("%-4d",array[i][j]);
        System.out.println();
    }

}

}

这个怎么样?

for (int i = 0; i < 10; i++){
  array[i] = new int[i + 1]
}

或者仅仅是为了让它发挥作用的乐趣(不要问其他方面)

//just the empty array
int[][] array = IntStream.range(0, 10)
                         .map(i -> i + 1)
                         .mapToObj(int[]::new)
                         .toArray(int[][]::new);

或者初始化函数式填充数组:

//the array with values
int[][] array = IntStream.range(0, 10)
                         .mapToObj(v -> IntStream.range(v, v + v + 1).toArray())
                         .toArray(int[][]::new);

甚至这样输出:

String out = Arrays.stream(array)
                   .map(x -> Arrays.stream(x)
                                   .mapToObj(y -> String.format("%-4d", y))
                                   .collect(Collectors.joining()))
                   .collect(Collectors.joining("\n"));
System.out.println(out);

对于通用解决方案,如果您决定更改数组的长度

int array[][] = new int[10][];

for (int i = 0; i < array.length; i++) {
    array[i] = new int[i + 1];
}

您也可以像

这样组合两个循环
    for (int i = 0; i < array.length; i++) {
        array[i] = new int[i + 1];
        for (int j = 0; j < i + 1; j++) {
            array[i][j] = i + j;
        }
    }

您可能会尝试将初始化移动到循环内

int array[][] = new int[10][];

for (int i = 0; i < 10; i++){
    array[i] = new int[i + 1];
    for (int j = 0; j < i + 1; j++) {
        array[i][j] = i + j;
    }
}
for (int i = 0; i < 10; i++) {
    for (int j = 0; j < i + 1; j++)
        System.out.printf("%-4d",array[i][j]);
    System.out.println();
}

与java 8:

Integer[][] a = new ArrayList<Integer[]>(Collections.nCopies( 10, new Integer[0]  ))
.stream()
.map( p -> new Integer[p.length +1] )
.toArray(size -> new Integer[size][]);  

代码现在比 x 更短:)

    int array[][] = new int[10][];

    for (int i = 0; i < array.length; i++)
    {
        array[i] = new int[i + 1];

        for (int j = 0; j < i + 1; j++) 
        { 
            array[i][j] = i + j;
        }
    }
    for (int[] row : array) 
    {
        for(int k:row)
            System.out.print( k+ " ");
        System.out.println();
    }