自写java打印菱形,支持传任意奇数行数,欢迎大家批评指正
public static void main(String[] args) {
printDiamond(9);
}
/**
* 打印菱形
*
* @param line 菱形行数,必须是奇数
*
*/
public static void printDiamond(int line) {
if (line <= 1) {
System.out.println("line 必须是大于1的奇数");
return;
}
if (line % 2 == 0) {
System.out.println("line 必须是大于1的奇数");
return;
}
for (int i = 1; i <= line; i++) {
/* 一边打印空白字符的数量,比如line是5,则第1行左右边分别打印2个空格,
* 第二行打印1个,第3行打印0个,第4行打印1个,第5行打印2个
*/
int oneSideSpaceNum = (line + 1) / 2 - i;
// 比如line是5,第4行oneSideSpaceNum计算为-1,进行相反数操作成正数
if (oneSideSpaceNum < 0) {
oneSideSpaceNum = -oneSideSpaceNum;
}
// 打印实体星号字符个数,一行字符总数减去两边空白字符数
int starNum = line - oneSideSpaceNum * 2;
// 打印左边空白
for (int j = 0; j < oneSideSpaceNum; j++) {
System.out.print(" ");
}
// 打印中间星号
for (int j = 0; j < starNum; j++) {
System.out.print("*");
}
// 打印右边空白
for (int j = 0; j < oneSideSpaceNum; j++) {
System.out.print(" ");
}
// 换行
System.out.println();
}
}
示例:
printDiamond(3)
*
***
*
printDiamond(5)
*
***
*****
***
*
printDiamond(17)
*
***
*****
*******
*********
***********
*************
***************
*****************
***************
*************
***********
*********
*******
*****
***
*