我需要制作一个金字塔,外面有 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();
}
}
现在它什么也没打印出来,我不知道为什么。
提前感谢我得到的任何答案。
你应该这样称呼
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
不使用预填充的二维数组,您也可以将其用于任何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();
}
}
}
你应该创建一个不同的方法,它实际上创建了一个正确的二维数组,其中包含正确的值。然后你可以调用你现有的
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