我怎样才能缩短我的 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();
}
如何使用 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();
}