java单循环,单变量/双变量处理图形的思路

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++;
			}
		}

	}
}

posted @ 2020-12-07 11:15  项安然  阅读(157)  评论(0编辑  收藏  举报