java编写金字塔

一、实心金字塔

首先,尝试写一个逐层加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 change
					str += "*";
				}
				for(int m=0;m<(starNum - i)/2;m++){
    
    
					str += " ";
				}
				System.out.print(str + "\n");
			}
	}
}

二、平均分布金字塔

星星交叉分布效果:
在这里插入图片描述
代码只需修改打印*位置的循环,间隔显示*空格

for(int n = 0;n < i;n++){
    
    //can change
	if(n % 2 == 0){
    
    
		str += "*";
	}else{
    
    
		str += " ";
	}
	//或简化成三目运算
	//str += n % 2 == 0 ? "*" : " "; 
}

三、空心金字塔

边缘为*,描绘一个金字塔的形状,效果如下:
在这里插入图片描述
同理,代码只需修改打印*位置的循环,在输出*的字段中,始末位置为*,其余位置为空格,且最后一行全部为*

				for(int n=0;n<i;n++){
    
    //can change
					if(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 ? "*" : "%"

猜你喜欢

转载自blog.csdn.net/weixin_43939111/article/details/131307299