package basis.week01;
public class Test05 {
public static void main(String[] args) {
// 单循环完成二维事件
// 首先要思考的是循环的本质是干嘛
// for(;;) {
// //按照代码顺序执行,开始,不知道什么时候结束;
// }
// 循环本质就是重复的做事;
// System.out.println("8");
// System.out.println("8");
// System.out.println("8");
// //循环代替
// int i=1;
// for(;i<=3;) {
// System.out.println("8");
// i++;
// }
// OK,开始画等边三角形
// 本质是画一个5*5的正方形,细分就是做25次
// for(int i=1;i<=25;i++) {
// //for()括号里面的内容,可以理解为为了循环补充更详细的信息,比如什么时候继续,什么时候结束执行,实际上只要确定循环退出条件就好了,
// //i=1; i++这种信息并不是根本的理解为循环从1开始,做完一次之后就+1;
// }
// 如果不进行一些补充说明的信息,那么i是1,小于100,那么它就一直循环了
// int i=1;
// for(;i<=25;) {
// i++;
// }
// //开始
// for(int i=1;i<=25;) {
// //每行要的事,打印*和换行,以及计数
// System.out.print("*");
// System.out.println();
// i++;
// }
// 一行要做的事是打印5个*,然后换行
// for(int i=1;i<=25;) {
// System.out.print("*");
// if(i%5==0) {
// System.out.println();
// }
// i++;
// }
//单循环,单变量处理三角型(二维事件)
for (int i = 1; i <= 25;) {
// 接下来处理要画的事情
// 先画空格,每行5个字符,空格越来越少
// 每一行1,2,3,4,5用i表示(5 + i - 1) / 5或者1+(i-1)/5
//每一列的i值转化成重置为1,2,3,4,5就是i减去5*(行数-1),那么5*(1+(i-1)/5-1)=5*((i-1)/5)
//每一列的i值转化成重置为1,2,3,4,5另外一种思路就是取余,但是5,10,15这种倍数不好处理
//每一行要做的事情,合并为两类事情,然后用要么要么ifelse的方式来做
if (i-5*((i - 1) / 5) <= (5 - (5 + i - 1) / 5)) {
System.out.print(" ");
} else {
//此处*号前面有空格,因为显示台行列的间距问题,不然的话会显示为直角了
System.out.print(" *");
}
if (i % 5 == 0) {
System.out.println();
}
i++;
// 这个循环本质就是做3件重复的事情,1、画空格或者空格+*号;2、换行;3、给变量i重新赋值
// 附加信息就是1、当i小于等于25的时候才做里面的事情,否则这段代码就直接不执行算执行完了;
}
// 单循环,双变量处理三角型(二维事件)
// 思路反着想,先处理要做的事情//画*或者空格每次5个
// int j=1;
// if(j<=5) {
// System.out.print("*");
// }
// j不处理就一直为1
// 此时重复的工作就来了
// int j=1;
// if(j<=5) {
// System.out.print("*");
// }
// j++;//2
// if(j<=5) {
// System.out.print("*");
// }
// j++;//3
// if(j<=5) {
// System.out.print("*");
// }
// j++;//4
// if(j<=5) {
// System.out.print("*");
// }
// j++;//5
// if(j<=5) {
// System.out.print("*");
// }
// //处理完5次之后要就要换行了,换行之后J又要重新计数
// System.out.println();
// j=1;
// if(j<=5) {
// System.out.print("*");
// }
// j++;//2
// if(j<=5) {
// System.out.print("*");
// }
// //......
// //合并处理
// int j=1;
// if(j<=5) {
// System.out.print("*");//要做的事情
// }else {
// //啥也不干
// }
//
// if(j==5) {
// j=0;//重置列的计数
// System.out.println();//换行
//
// }else {
// j++;
// }
// //第二次
// if(j<=5) {
// System.out.print("*");//要做的事情
// }else {
// //啥也不干
// }
//
// if(j==5) {
// j=0;//重置列的计数
// System.out.println();//换行
//
// }else {
// j++;
// }
// //.......
// // 将上面的重复工作再次合并
// // 并且让事情循环起来
// int i = 1;
// int j = 1;
// for (; i <= 5;) {
// if (j <= 5) {
// System.out.print("*");// 要做的事情
// } else {
// // 啥也不干
// }
//
// if (j == 5) {
// j = 1;// 重置列的计数
// System.out.println();// 换行
// i++;//行数也要在换行后增加
// } else {
// j++;
// }
// }
// 行列联动,其实循环做了25次
for (int i = 1, j = 1; i <= 5;) {
if (j <= 5 - i) {
System.out.print(" ");// 要做的事情
} else {
System.out.print(" *");// 要做的事情
}
if (j == 5) {
j = 1;// 重置列的计数
System.out.println();// 换行
i++;// 行数也要在换行后增加
} else {
j++;
}
}
}
}