JAVA输出菱形并使用绝对值_利用for循环打印实心棱形和空心棱形

一.要求:

提示用户输入棱形的行数,比如输入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();//每行行尾才打印换行符

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值