java怎么打印出如下图案 试了好久没成功

就是这个,用了很多方法 循环和嵌套 所以到底怎么弄出来的有没有人知道给我解答一下

img

帮你写了一个

public class CSDNQ7911656 {
    public static void main(String[] args) {
        int n = 4; 
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j < i; j++) {
                System.out.print(" ");
            }
            System.out.print(i);
            for (int j = i + 1; j <= 2 * n - i; j++) {
                System.out.print(" ");
            }
            System.out.println(i);
        }
        for (int i = 1; i <= 2 * n; i++) {
            System.out.print(" ");
        }
        System.out.println(4);
        for (int i = n; i >= 1; i--) {
            for (int j = 1; j < i; j++) {
                System.out.print(" ");
            }
            System.out.print(i);
            for (int j = i + 1; j <= 2 * n - i; j++) {
                System.out.print(" ");
            }
            System.out.println(i);
        }
    }
}


该回答引用自ChatGPT

GPT解决这种简单的程序还行,运行过,这个没错

img

public static void main(String[] args) {
        for (int i = 1; i <= 4; i++) {  // 打印上半部分
            for (int j = 1; j <= i - 1; j++) {
                System.out.print(" ");
            }
            System.out.print(i);
            for (int k = 1; k <= 8 - 2 * i; k++) {
                System.out.print(" ");
            }
            if (i < 4) {
                System.out.print(i);
            }
            System.out.println();
        }
        for (int i = 3; i >= 1; i--) {  // 打印下半部分
            for (int j = 1; j <= i - 1; j++) {
                System.out.print(" ");
            }
            System.out.print(i);
            for (int k = 1; k <= 8 - 2 * i; k++) {
                System.out.print(" ");
            }
            System.out.println(i);
        }
    }

可以想象成打印一个矩形,然后加上一个判断,当满足对角线(主副)的条件时候打印数字,负责就是打印空格,用两层循环即可.

img

#include<stdio.h>
#define MIN(x,y) ((x)<(y)?(x):(y)) 
int main(){
    int n;
    printf("请输入一个正整数:");
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i==j || i+j+1==n){
                //满足对角线要求输出数字(输出的数字也有联系)
                printf("%d",MIN(i+1,n-i));
            }else{
                //负责输出空格
                printf(" ");
            }
        }
        //记得要换行
        printf("\n");
    }
    return 0;
}

看错了,原来是java代码,我重写了一下,不好意思.

img


import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入一个正整数:");
        int n=sc.nextInt();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if(i==j || i+j+1==n){
                    System.out.printf("%d",Math.min(i+1,n-i));
                }else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}

写的不好,你凑合看一下,应该是这个意思吧.