-1

我如何使用 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();
    }

}

}

4

5 回答 5

1

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

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;
        }
    }
于 2016-06-03T11:51:10.147 回答
1

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

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();
}
于 2016-06-03T11:52:48.110 回答
0

这个怎么样?

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);
于 2016-06-03T11:49:50.760 回答
0

使用 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][]);  
于 2016-06-03T11:55:21.677 回答
0

代码现在比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();
    }
于 2016-06-03T14:11:03.083 回答