Day11.3:利用for循环打印三角形——思维详解
利用for循环打印三角形
要求:
利用for循环打印出以下三角形
- 思路与分析:
观察三角形,每一行的左边其实都有打印内容的,只是被空格替换了;
将左边空格的部分替换成*,补齐后会得到一个梯形,我们把它分成三部分,会得到:
我们则可以利用for循环依次将三个部分打印出来,再将第一部分的内容替换成空格即可得到
先将第一个三角形打印出来
public class Triangle{
public static void main(String[] args){
//首先我们先思考第一个三角形是如何形成的,怎么让每一行的内容逐渐减少,或者说是每一次的循环打印出来的内容越来越少
//我们要求打印的是一个五行五列的三角形,那么我们得到一个信息就是五行是由五次循环得到的,且每一次循环的打印内容会越来越少
for(int a=1;a<=5;a++){//我们先建立一个循环5次for语句,再思考怎么打印出第一行的5个*;这一步尤为重要;
//一行5个*,说明这一行的输出代码是在一个循环语句里面执行出来的,第一波循环了5次打印出了5个*;第二波循环了4次,打印出4个*
//第一个三角形从上到下的5行是依次递减一个*,即每一波循环下来内部的小循环会少一次;第一次循环5次,我们可以联想到从5到1,以此减少可以联想到--;即b=5,b>=1,b--;但是要做到每一行缩减一次,即每一波循环下来内部要少一次小循环,我们观察b=5,b>=1,b--;如何让这个b做到只循环4次呢,那么将中间的条件改为b>=2,是不是只有四次了,那么我们将a作为变量,从1升到5,来代替原来b=5,b>=1,b--这个表达式中间的条件,则可以实现每一波循环下来,关于b这个循环语句的输出内容依次减少
for(int b=5;b>=a;b--){//利用嵌套结构的思维,将b与a联系起来,b从5降到1,a从1增加到5,即可形成每次打印的内容逐次减少
System.out.print("*");
}System.out.println();//保证嵌套内的小循环每走完一次就会形成换行
}
}
}//外循环控制列,内循环控制行
第一个三角形打印出来,我们分析第二个三角形,第二个三角形第一行为1个*,后面逐渐增多,与第一个三角形恰好相反;
说明在一个循环语句中,打印的*随着循环次数增加,想到++;再想到一个变量c=1;c<=1;c++;如果c<=1则只会循环一次,如果c<=5,则循环5次;于是数字成为了变量,即a。因为第二个三角形与第一个三角形是平行的,所以在循环语句上一个三角形和第二个三角形是平级,平行输出,他们两个不存在嵌套,但是都属于a变量for循环的嵌套循环
public class Triangle{
public static void main(String[] args){
for(int a=1;a<=5;a++){
for(int b=5;b>=a;b--){//观察三角形的行内容是从大到小;想到--
System.out.print("*");
}//第二个三角形的循环与第一个属于平行关系
for(int c=1,c<=a;c++){
System.out.print("*");//观察三角形的行内容是从大到小;想到++
}
//同样第三个三角形思维一样,且都是平行关系
for(int d=1;d<a;d++){
//这里如果d<=a,则第一行会像第二个三角形一样输出一个,但是三角形第一个只有一个*,所以这里就不要等于了,让第一次循环无效即可
System.out.print("*");
}
System.out.println();//嵌套内的三个循环执行完一次后,换行打印第二波大循环
}
}
}
最后将第一个三角形的符号换成空格即可得到三角形
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现