1、输出一个4行5列的星星(*)图案

  需求:输出一个4行5列的星星(*)图案。
  结果:
          *****
          *****
          *****
          *****

  循环嵌套:就是循环体语句本身是一个循环语句。
  
  结论:
          外循环控制的是行,内循环控制的是列

/*
 * 需求:输出一个4行5列的星星(*)图案。
 * 结果:
 * 		*****
 * 		*****
 * 		*****
 * 		*****
 * 
 * 循环嵌套:就是循环体语句本身是一个循环语句。
 * 
 * 结论:
 * 		外循环控制的是行,内循环控制的是列
 */
public class ForForDemo {
	public static void main(String[] args) {
		//原始的做法
		System.out.println("*****");
		System.out.println("*****");
		System.out.println("*****");
		System.out.println("*****");
		System.out.println("-------------------");
		
		//虽然我们完成了题目的要求,但是不好
		//假如我们有很多这样的要求,而且行和列是变化的
		//所以我们要改进目前的代码的写法
		//我要在一行上输出一颗*
		//System.out.println("*");
		//我要在一行上输出5颗*
		/*
		System.out.println("*");
		System.out.println("*");
		System.out.println("*");
		System.out.println("*");
		System.out.println("*");
		*/
		//之所以出现这样的结果,是因为System.out.println()每次把内容输出后加一个换行
		//有解决方案呢?有
		//用System.out.print()就可以解决
		/*
		System.out.print("*");
		System.out.print("*");
		System.out.print("*");
		System.out.print("*");
		System.out.print("*");
		*/
		
		/*
		//用循环改进代码
		for(int x=1; x<=5; x++) {
			System.out.print("*");
		}
		//采用下面的内容就可以实现换行
		System.out.println();
		
		//第二行的5颗*
		for(int x=1; x<=5; x++) {
			System.out.print("*");
		}
		System.out.println();
		
		//第三行的5颗*
		for(int x=1; x<=5; x++) {
			System.out.print("*");
		}
		System.out.println();
		
		//第四行的5颗*
		for(int x=1; x<=5; x++) {
			System.out.print("*");
		}
		System.out.println();
		*/
		//重复的代码执行多次,用循环改进
		for(int y=1; y<=4; y++) {
			for(int x=1; x<=5; x++) {
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("-------------------");
		
		for(int y=1; y<=7; y++) {
			for(int x=1; x<=8; x++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

2、循环嵌套练习

2.1、打印正三角形

 需求:请输出如下图形
            *
            **
            ***
            ****
            *****

/*
 * 需求:请输出如下图形
 *			*
 *			**
 *			***
 *			****
 *			*****
 */
public class ForForTest {
	public static void main(String[] args) {
		//通过简单的观察,我们发现这是一个5行的,列数变化的形状
		//首先来实现一个5行5列的形状
		for(int x=1; x<=5; x++) {
			for(int y=1; y<=5; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("----------------------");
		
		//虽然我们实现了一个5行5列的形状
		//但是这不是我们想要的
		//我们要的形状是列数变化的
		//怎么办呢?
		//第一行:1	y=1; y<=1
		//第二行:2	y=1; y<=2
		//第三行:3	y=1; y<=3
		//第四行:4	y=1; y<=4
		//第五行:5	y=1; y<=5
		//我们需要一个变量的变量是从1开始,到5结束
		int z = 1;
		for(int x=1; x<=5; x++) {
			for(int y=1; y<=z; y++) {
				System.out.print("*");
			}
			System.out.println();
			z++;
		}
		System.out.println("----------------------");
		
		//我们现在已经实现了我们的需求,但是我们继续观察会发现
		//第一次:x的值是1
		//第二次:x的值是2
		//...
		//x和z是一样的变化过程,这样的话,我们就可以省略z,直接用x替代
		for(int x=1; x<=5; x++) {
			for(int y=1; y<=x; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("----------------------");
	}
}

2.2、打印九九乘法表

需求:在控制台打印九九乘法表
\t:转移字符,表示一个tab键的位置

/*
 * 需求:在控制台打印九九乘法表
 * 
 * \t:转移字符,表示一个tab键的位置
 */
public class ForForTest2 {
	public static void main(String[] args) {
		//先打印一个9行9列的星形(列是变化的)
		for(int x=1; x<=9; x++) {
			for(int y=1; y<=x; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("------------");
		
		/*
		1*1=1
		1*2=2	2*2=4
		1*3=3	2*3=6	3*3=9
		...
		*/
		for(int x=1; x<=9; x++) {
			for(int y=1; y<=x; y++) {
				System.out.print(y+"*"+x+"="+y*x+"\t");
			}
			System.out.println();
		}
	}
}