如何反转三角形锯齿状阵列?

时间:2017-02-27 10:56:39

标签: java arrays

我已经完成了正常的锯齿状阵列,但我不明白如何颠倒它。我还有一个问题,如何将三角形的一侧从左侧移到右侧?我可以用循环执行此操作,还是需要为数组的每一行写入不同数量的空格?

static int[][] triangle(int lines){
    int[][] arr = new int[lines][];
    for(int i = 0; i < arr.length; i++){
        arr[i] = new int[i + 1];
    }
    int count = 0;
    for(int i = 0; i < arr.length; i++){
        for(int j = 0; j < arr[i].length; j++){
            arr[i][j] = count++;
        }
    }

    for(int i = 0; i < arr.length; i++){
        for(int j = 0; j < arr[i].length; j++){
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }
return arr;
}

某种结果:

0 
1 2 
3 4 5 
6 7 8 9 
10 11 12 13 14 

2 个答案:

答案 0 :(得分:2)

您可以通过更改初始化arr数组的方式快速创建反转三角形。

static int[][] revTriangle(int lines) {
    int[][] arr = new int[lines][];
    for (int i = 0; i < arr.length; i++) {
        arr[i] = new int[lines - i]; // this line
    }
    int count = 0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            arr[i][j] = count++;
        }
    }

    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }
    return arr;
}

我得到以下输出:

0 1 2 3 4 
5 6 7 8 
9 10 11 
12 13 
14 

希望这有帮助!

答案 1 :(得分:0)

如果您需要更紧凑的解决方案,您可以对一些循环进行分组(基于anacron答案):

  static int[][] triangle( int lines, boolean straight)
  {
    int[][] arr = new int[lines][];
    int count = 0;    
    for ( int i = 0; i < arr.length; i++ )
    {
      int start = (straight? i : lines);
      int step = (straight? 1 : -i);
      arr[i] = new int[start + step ];
      for ( int j = 0; j < arr[i].length; j++ )
      {
        arr[i][j] = count++;
        System.out.print( arr[i][j] + " " );        
      }
      System.out.println();
    }    
return arr;

}