根据输入打印出最大的沙漏形状

Yolanda-fan / 2024-02-21 / 原文

import java.util.Scanner;

/**
 * 打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数
 * 例如:输入 19 *
 * 输出:
 *      *****
 *       ***
 *        *
 *       ***
 *      *****
 *      2
 */
public class Demo02 {

    public static void main(String[] args) {
        int num=0;
        String str="*";

        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入1个正整数N(≤1000)和一个符号:");

        while(scanner.hasNextInt() && scanner.hasNext()){
            num=scanner.nextInt();
            str=scanner.next();
            if(num>1000){
                System.out.println("数值过大!");
            }else if(str.length()>1){
                System.out.println("请输入一个符号:");
            }else{
                print(num,str);//根据参数打印图案
            }
            System.out.println("请输入1个正整数N(≤1000)和一个符号:");
        }
        System.out.println("格式不正确,结束运行!");
        scanner.close();
    }

    public static void print(int num,String str){
        int last=0;//剩余的图案数

        //计算某一行最大图案数
        int sum=1;//需要的图案最大总数
        int max=1;//某一行上的最大图案数

        while(sum<=num){
            max+=2;//每行隔2个
            //判断剩余图案数目是否足够下一行需要的图案数
            if(num-sum>=max*2){
                sum+=(max*2);
            }else{
                max-=2;
                break;
            }

        }
        last=num-sum;

        //打印图案
        int space=0;//某一行需要的空格数量
        for (int i = max; i>1; i-=2) {

                space=(max-i)/2;

                for (int j = 0; j < space; j++) {
                    System.out.print(" ");
                }

                for (int j = 0; j < i; j++) {
                    System.out.print(str);
                }

                for (int j = 0; j < space; j++) {
                    System.out.print(" ");
                }

                System.out.println();
            }
        for (int i =1; i<=max; i+=2) {

            space=(max-i)/2;

            for (int j = 0; j < space; j++) {
                System.out.print(" ");
            }

            for (int j = 0; j < i; j++) {
                System.out.print(str);
            }

            for (int j = 0; j < space; j++) {
                System.out.print(" ");
            }

            System.out.println();
        }
        if(last>0){
            System.out.println(last);

        }
    }

}

结果: