一、实心金字塔
首先,尝试写一个逐层加1个*的金字塔:
可以看出,每一层由空格和*
组成,且空格+*
的总数为底部基石的数量,那么前后空格数就是(底部基石数 - 各层星星数)*1/2
,然后拼接字符串打印空格+*+空格
即可(注意:java直接/
会取整)
然而在计算机显示中,每行列都是垂直对应,可以从上图结果看出,逐层加*
并不能保证对其,但保留奇数行可以得到一个正三角金字塔。那么跳过偶数行打印,即可得到一个正三角的金字塔:
最终代码如下:
public class Test{public static void main(String[] args){int starNum = 7;System.out.println("start=" + starNum);for(int i = 1; i <= starNum;i += 2){String str = "";for(int m=0;m<(starNum - i)/2;m++){str += " ";}for(int n=0;n<i;n++){//can changestr += "*";}for(int m=0;m<(starNum - i)/2;m++){str += " ";}System.out.print(str + "\n");}}}
二、平均分布金字塔
星星交叉分布效果:
代码只需修改打印*
位置的循环,间隔显示*
和空格
for(int n = 0;n < i;n++){//can changeif(n % 2 == 0){str += "*";}else{str += " ";}//或简化成三目运算//str += n % 2 == 0 ? "*" : " "; }
三、空心金字塔
边缘为*
,描绘一个金字塔的形状,效果如下:
同理,代码只需修改打印*
位置的循环,在输出*
的字段中,始末位置为*,其余位置为空格,且最后一行全部为*
for(int n=0;n<i;n++){//can changeif(i<starNum){ if((n==0)||(n==i-1)){ str+="*"; }else{ str+=" "; } //或者简化为三目运算 //str += n==0||n==i-1?"*":" ";}else{str+="*";}}
补充:
前端转后端的童鞋注意了,在java中,三目运算符不能在里面写赋值语句,这点和js不一样。比如(n > 2) ? (str = "*") : (str = "%");
,这句话前端js可以编译通过,但如果放到java里就会编译不通过,报错:不是语句。java中应当这样写:str = n > 2 ? "*" : "%"
来源地址:https://blog.csdn.net/weixin_43939111/article/details/131307299