博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用for循环打印实心棱形和空心棱形
阅读量:5816 次
发布时间:2019-06-18

本文共 1520 字,大约阅读时间需要 5 分钟。

一.要求:

    提示用户输入棱形的行数,比如输入5时,打印如下实心棱形和空心棱形(由于排版问题,可能显示会有变形):

   *

 ***

*****

 ***

   *

  *

 * *

*   *

 * *

  *

二.分析:

 A.图形是上下对称的

 B.每行先打印空格,再打印星号,后面的空格不用打印

 C.中间行不打印空格,其余行根据与中间的行距,依次增加打印空格的数量

 D.每行打印的星号数量为最大列宽减去此行打印空格数量的两倍

三.实现:

import java.util.Scanner;

public class loopDemo{

    public static void main(String [] args){

        Scanner sc = new Scanner(System.in);

        System.out.print("请输入需要打印的棱形行数:");//提示输入

        int num = sc.nextInt();    //读取输入

        int mid = num/2+1;  //计算中间行

        System.out.printf("%d行实心棱形如下:\n",num);   

        for(int i=1;i<=num;i++){

            int x = 0;                //用于记录每行开始打印的空格数,每行都需要先将打印的空格数x置零,所以不能放到循环外面

            /*   

            if(i <= mid){

                for(int j=1;j<=mid-i;j++) {

                    System.out.printf(" ");

                    x=j;//记录行首打印的空格数,最后一次赋值不会执行,所以x=j,而不是x=j-1

                }

                for(int j=1;j<=num-2*x;j++) {

                    System.out.printf("*");

                }

            }

            if(i > mid) {

                for(int j=1;j<=i-mid;j++){

                    System.out.printf(" ")

                    ;x=j;

                }

                for(int j=1;j<=num-2*x;j++) {

                    System.out.printf("*");   

                }   

            }

            //上面的逻辑其实相同,可以采用下面的绝对值来进行简化

            */

            for(int j=1;j<=Math.abs(mid-i);j++) {

                System.out.printf(" ");//每行先打印空格

                x=j;//并记录每行行首打印的空格数

            }

            for(int j=1;j<=num-2*x;j++) {//每行*号数量为总的数量减去两端的空格数量

                System.out.printf("*");//每行打印* 号

            }           

            System.out.println();//每行行尾才打印换行符               

        }

        System.out.printf("%d行空心棱形如下:\n",num);

        for(int i=1;i<=num;i++){

            int x=0;

            for(int j=1;j<=Math.abs(mid-i);j++) {

                System.out.printf(" ");//每行先打印空格

                x=j;//并记录每行行首打印的空格数

            }

            for(int j=1;j<=num-2*x;j++) {//每行*号数量为总的数量减去两端的空格数量

                if(j == 1 || j == num-2*x) System.out.printf("*");//每行打印* 号

                else System.out.printf(" ");

            }           

            System.out.println();//每行行尾才打印换行符           

        }           

    }

}

本文转自 碧云天 51CTO博客,原文链接:http://blog.51cto.com/333234/1775991,如需转载请自行联系原作者

你可能感兴趣的文章
UiAutomator源码分析之UiAutomatorBridge框架
查看>>
python 开发之selenium
查看>>
Xcode3.2.5中找不到Mac OS X - Command Line Utility -...
查看>>
css的div垂直居中的方法,百分比div垂直居中
查看>>
如何理解EM算法
查看>>
nginx 域名跳转一例~~~(rewrite、proxy)
查看>>
linux用户家目录无损迁移到独立硬盘
查看>>
文件查找
查看>>
shell编程前言(一)
查看>>
5、centos7.*配置yum的EPEL源及其它源
查看>>
JSON前后台简单操作
查看>>
shell中一些常见的文件操作符
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
使用第三方类、库需要注意的正则类RegexKitLite的使用
查看>>
iOS \U7ea2 乱码 转换
查看>>
FCN图像分割
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
数据库事务隔离级别
查看>>