用for循环输出如上图所示的菱形
思路:
我们以17为例
首先,输出一列九行的星号,这是最熟悉的逐行输出
public class test{
public static void main(String[] args) {
int linesum = 17;//菱形的最大行数,输入一个 奇数
for (int i=1; i<=linesum; i++){//i为当前所在行
System.out.println("*");
}
}
}
分析一下菱形
红线以上的部分星号是递增的,红线以下的部分是递减的
我们把菱形分成两个部分
public class test{
public static void main(String[] args) {
int linesum = 17;//菱形的最大行数,输入一个 奇数
int maxline = (linesum + 1) / 2;
int minline = linesum - maxline;
//上半部分-递增
for (int i=1; i<=maxline; i++){//i为当前所在行
System.out.println("*");
}
//下半部分-递减
for (int i=1; i<=minline; i++){//i为当前所在行
System.out.println("*");
}
}
}
现在我们先考虑上半部分
首先要解决的是缩进问题(这里可能用词不准确)
可以看到
第一行一共有16个空格
第二行一共有14个空格
由上到下每行的空格数为linesum(总行数)- 当前行数
public class test{
public static void main(String[] args) {
int linesum = 17;//菱形的最大行数,输入一个 奇数
int maxline = (linesum + 1) / 2;
int minline = linesum - maxline;
//上半部分-递增
for (int i=1; i<=maxline; i++){//i为当前所在行
for (int space=1; space <= (maxline-i); space++){
System.out.print(" ");//""号内为两个空格
}
System.out.println("*");
}
//下半部分-递减
for (int i=1; i<=minline; i++){//i为当前所在行
System.out.println("*");
}
}
}
输出结果如下
现在来把菱形的上半部分补好
public class test{
public static void main(String[] args) {
int linesum = 99;//菱形的最大行数,输入一个奇数
int maxline = (linesum + 1) / 2;
int minline = linesum - maxline;
//上半部分-递增
for (int i=1; i<=maxline; i++){//i为当前所在行
for (int space=1; space <= (maxline-i); space++){
System.out.print(" ");//""号内为两个空格
}
for (int star=1; star<=i+(i-1); star++){
System.out.print("* ");//""号内为*号加一个空格
}
System.out.println();//每次输出后换行
}
//下半部分-递减
for (int i=1; i<=minline; i++){//i为当前所在行
System.out.println("*");
}
}
}
输出结果如下
上半部分的就做好了
下半部分的逆向思维吧...
多做了个空心菱形
public class test{
public static void main(String[] args) {
int linesum = 17;//菱形的最大行数,输入一个奇数
int maxline = (linesum + 1) / 2;
int minline = linesum - maxline;
//上半部分-递增
for (int i=1; i<=maxline; i++){//i为当前所在行
for (int space=1; space <= (maxline-i); space++){
System.out.print(" ");//""号内为两个空格
}
for (int star=1; star<=i+(i-1); star++){
if (star==i+(i-1)){
System.out.print("* ");
}
else if (star==1){
System.out.print("* ");
}
else{
System.out.print(" ");
}
}
System.out.println();//每次输出后换行
}
//下半部分-递减
for (int i=minline; i>=1; i--){//i为当前所在行
for (int space=0; space<=(minline-i); space++){
System.out.print(" ");
}
for (int star=i+(i-1); star>=1; star--){
if (star==i+(i-1)){
System.out.print("* ");
}
else if (star==1){
System.out.print("* ");
}
else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
原理就是用if控制输出
水汐音