我需要使用二维整数数组制作一个外边有 1 个、中间有 5 个的金字塔

问题描述 投票:0回答:3

我需要制作一个金字塔,外面有 1 个,中间有 5 个,就像我在标题中说的那样。

程序的最后一部分,我有的方法,不能改太多。我已经尝试了多种修复它的方法,但它要么打印出错误,要么什么都不打印。我不确定我哪里出错了。

我需要程序的结果是这样的:

  1  1  1  1  1  1  1  1  1
  1  2  2  2  2  2  2  2  1
  1  2  3  3  3  3  3  2  1
  1  2  3  4  4  4  3  2  1
  1  2  3  4  5  4  3  2  1
  1  2  3  4  4  4  3  2  1
  1  2  3  3  3  3  3  2  1
  1  2  2  2  2  2  2  2  1
  1  1  1  1  1  1  1  1  1

这是我的代码:

//5 numbers
public static void main(String[] args) {
                 
         int[][] data = {
                 {1},{2},{3},{4},{5}     
         };
         
         
        } //Print out
    static final int SIZE = 9;
    static void print2DArray(int[][] data) {
        for(int row=0; row < data.length; row++) {
            for(int col=0; col < data[0].length; col++){
                System.out.printf("%3d", data[row][col]);
            }
                System.out.println();
        }

    for (int i = 0; i < data[0].length*3 +2; i++) System.out.print("=");
    System.out.println();   
        
}
}

现在它什么也没打印出来,我不知道为什么。

提前感谢我得到的任何答案。

java multidimensional-array
3个回答
1
投票

你应该这样称呼

print2DArray

public static void main(String[] args) {
    int[][] data = {
        {1}, {2}, {3}, {4}, {5}
    };
    print2DArray(data);
}

static void print2DArray(int[][] data) {
    int size = data.length * 2 - 1;
    for (int row = 0; row < size; ++row) {
        for (int col = 0; col < size; ++col) {
            System.out.printf("%3d", data[
                Math.min(Math.min(row, size - row - 1),
                         Math.min(col, size - col - 1))][0]);
        }
        System.out.println();
    }
}

输出:

  1  1  1  1  1  1  1  1  1
  1  2  2  2  2  2  2  2  1
  1  2  3  3  3  3  3  2  1
  1  2  3  4  4  4  3  2  1
  1  2  3  4  5  4  3  2  1
  1  2  3  4  4  4  3  2  1
  1  2  3  3  3  3  3  2  1
  1  2  2  2  2  2  2  2  1
  1  1  1  1  1  1  1  1  1

或者你可以给它一个尺寸然后打印它。

static void print2DArray(int size) {
    for (int row = 0; row < size; ++row) {
        for (int col = 0; col < size; ++col) {
            System.out.printf("%3d",
                Math.min(Math.min(row, size - row - 1),
                         Math.min(col, size - col - 1)) + 1);
        }
        System.out.println();
    }
}

print2DArray(11);

输出:

  1  1  1  1  1  1  1  1  1  1  1
  1  2  2  2  2  2  2  2  2  2  1
  1  2  3  3  3  3  3  3  3  2  1
  1  2  3  4  4  4  4  4  3  2  1
  1  2  3  4  5  5  5  4  3  2  1
  1  2  3  4  5  6  5  4  3  2  1
  1  2  3  4  5  5  5  4  3  2  1
  1  2  3  4  4  4  4  4  3  2  1
  1  2  3  3  3  3  3  3  3  2  1
  1  2  2  2  2  2  2  2  2  2  1
  1  1  1  1  1  1  1  1  1  1  1

0
投票

不使用预填充的二维数组,您也可以将其用于任何even大小的矩阵。

public class scratch_1 {
    static final int MATRIX_SIZE = 10;
    static final int ARRAY_SIZE = MATRIX_SIZE/2;

    public static void main(String[] args) {
        print2DArray();
    }

    static void print2DArray() {
        for (int rowIndex = 1; rowIndex < MATRIX_SIZE; rowIndex++) {
            for (int colIndex = 1; colIndex < MATRIX_SIZE; colIndex++) {

                int outputValue = Math.min(rowIndex, colIndex);

                if(colIndex >= ARRAY_SIZE ){
                    outputValue = Math.min(MATRIX_SIZE-colIndex, rowIndex);
                }
                if(rowIndex >= ARRAY_SIZE){
                    outputValue = Math.min(MATRIX_SIZE-rowIndex, outputValue);
                }

                System.out.printf("%3d", outputValue);
            }
            System.out.println();
        }
    }
}

0
投票

你应该创建一个不同的方法,它实际上创建了一个正确的二维数组,其中包含正确的值。然后你可以调用你现有的

print2DArray()
并将二维数组传递给它以获得显示的版本:

class Main { 

  public static void main(String[] args) {
    int[][] data = make2DPyramidArray(7);
    print2DArray(data);
  }

  static int[][] make2DPyramidArray(int maxNumber) {
    int size = maxNumber * 2 - 1;
    int[][] arr = new int[size][size];
    for(int row=1; row <=arr.length; row++) {
      for(int col=1; col <= arr[row-1].length; col++) {
        int value = Math.min(row <= maxNumber ? row : (maxNumber * 2 - row),
                             col <= maxNumber ? col : (maxNumber * 2 - col));
        arr[row-1][col-1] = value;
      }  
    }
    return arr;
  }
  
  static void print2DArray(int[][] data) {
    for(int row=0; row < data.length; row++) {
      for(int col=0; col < data[row].length; col++){
        System.out.printf("%3d", data[row][col]);
      }
      System.out.println();
    }
  }
  
}

输出:

  1  1  1  1  1  1  1  1  1  1  1  1  1
  1  2  2  2  2  2  2  2  2  2  2  2  1
  1  2  3  3  3  3  3  3  3  3  3  2  1
  1  2  3  4  4  4  4  4  4  4  3  2  1
  1  2  3  4  5  5  5  5  5  4  3  2  1
  1  2  3  4  5  6  6  6  5  4  3  2  1
  1  2  3  4  5  6  7  6  5  4  3  2  1
  1  2  3  4  5  6  6  6  5  4  3  2  1
  1  2  3  4  5  5  5  5  5  4  3  2  1
  1  2  3  4  4  4  4  4  4  4  3  2  1
  1  2  3  3  3  3  3  3  3  3  3  2  1
  1  2  2  2  2  2  2  2  2  2  2  2  1
  1  1  1  1  1  1  1  1  1  1  1  1  1
© www.soinside.com 2019 - 2024. All rights reserved.