循环

一、while循环

语法:

while(条件){

// 代码块

}

先判断条件,如果条件成立,则执行代码块,执行完毕继续判断条件,条件成立时继续执行代码块,直到条件不成立则结束。

循环过程的四要素:

  • 初始变量
  • 循环条件
  • 循环内容(循环体)
  • 条件的变更
// 打印100次Hello, world
public class Demo1 {
	public static void main(String[] args) {
		// 如果次数小于100,就打印Hello world
		int count = 0;
		while(count < 100) {
			System.out.println("第"+count+"次Hello, world");
			// 次数加1
			count++;
		}
	}
}
public class Demo2 {
	public static void main(String[] args) {
		// 输出1-100中所有偶数的和
		int num = 1;
		int sum = 0; // 和值
		
		while(num <= 100) {
			if(num % 2 == 0) {
				sum = sum + num;
			}
			num++;
		}
		
		System.out.println(sum);
	}
}

二、do-while循环

语法:

do{

// 代码块

}while(条件);

流程:先执行一次代码块,然后判断条件,如果条件成立则继续执行代码块,直到条件不成立为止。

public class Demo2 {
	// 使用do-while来打印100次Hello, world
	public static void main(String[] args) {
		int n = 1;
		do {
			System.out.println(n + "Hello, world");
			n++;
		}while(n <= 100) ;
		
		// do-while的适用场景:
		// 需要先执行一次后才有判断条件
		// 写一次代码,如果老师评价不为y就再写一次,直到老师评价为y
		Scanner input = new Scanner(System.in);
		String p;
		// 业务
		 do{
			System.out.println("写一遍代码");
			System.out.println("请老师给个评价:");
			// 老师给评语
			p = input.next();
			System.out.println("老师的评语是:" + p);
		} while(!p.equals("y"));
	}
}

while与do-while区别:

while先判断条件,再执行代码块,可能一次都不执行。

do-while先执行一次代码块,再判断条件,至少执行一次。

三、for循环

语法:

for(初始化变量;条件;迭代变量变更){

// 代码块

}

流程:

1、初始化变量(执行一次)
2、判断条件
3、循环内容
4、条件变更
5、再判断条件…(循环2、3、4直到条件不成立)

public class Demo3 {
	// 使用for来打印100次Hello, world
	public static void main(String[] args) {
		/*
		 1、初始化变量(执行一次)
		 2、判断条件
		 3、循环内容
		 4、条件变更
		 5、再判断条件...(循环2、3、4直到条件不成立)
		 */
//		int n = 1;
//		while(n <= 100) {
//			System.out.println(n + "Hello, world");
//			n++;
//		}
		
		for(int n = 1;n <= 100; n++) {
			System.out.println(n + "Hello, world");
		}
	}
}

四、流程控制

在循环中,可以使用break和continue实现循环控制。

break:直接终止当前循环,整个循环结束。

continue:跳过当次循环(continue后面的代码不执行),继续进行下一次循环。

public class Demo9 {
	// 流程控制,break用法
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			System.out.println("开始打游戏第"+i+"局");
			if(i == 5) {
				System.out.println("一声雷响,网线断了");
				break;
			}
			System.out.println("第"+i+"局游戏结束");
		}
		
		
		int sum = 0;
		for (int i = 1; i <= 100; i++) {
			sum = sum + i;
			if(sum > 1000) {
				System.out.println(sum);
				break;
			}
		}
	}
}
public class Demo10 {
	// 流程控制continue用法
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			System.out.println("开始打游戏第"+i+"局");
			if(i == 5) {
				System.out.println("一声雷响,网线断了");
				continue;
			}
			System.out.println("第"+i+"局游戏结束");
		}
		
		
		for (int i = 1; i <= 100; i++) {
			// 当前数字是7的倍数或者个位为7或者十位为7就跳过
			if(i % 7 == 0 || i % 10 == 7 || i / 10 == 7) {
				continue;
			}
			System.out.println(i);
		}
	}
}

五、嵌套循环

指循环中包含其他的循环。

执行流程:

外层循环执行一次,里层循环全部执行后,外层再执行第二次,里层循环继续全部执行。

简单来说,双重嵌套循环,总循环次数等于外层循环次数乘以里层循环次数。

public class Demo11 {
	// 嵌套循环
	public static void main(String[] args) {
//		for (int i = 1; i <= 6; i++) {
//			System.out.println("第"+i+"排");
//			for (int j = 1; j <= 10; j++) {
//				System.out.println("第"+i+"排===第"+j+"列");
//			}
//		}
		
		// 打印图形
		for (int i = 1; i <= 6; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
public class Demo12 {
	public static void main(String[] args) {
		// 嵌套循环(鸡兔同笼问题)(鸡兔三十六,共计一百足,问鸡兔各几何)
//		for (int i = 1; i <= 36; i++) {// 鸡
//			for (int j = 1; j <= 36; j++) { // 兔
//				if(i + j == 36 && i * 2 + j * 4 == 100) {
//					System.out.println("鸡有"+i+"只,兔有"+j+"只");
//				}
//			}
//		}
		
		
		// 百钱买百鸡(公鸡5文钱一只,母鸡3文钱一只,小鸡1文钱3只,
		// 如果要用100文钱买100只鸡,问公鸡、母鸡、小鸡各多少只)
		for (int i = 0; i <= 100; i++) { // 公鸡
			for (int j = 0; j <= 100; j++) { // 母鸡
				for (int k = 0; k <= 100; k+=3) { // 小鸡
					if(i + j + k == 100 && i * 5 + j * 3 + k / 3 == 100) {
						System.out.println("公鸡有"+i+"只,母鸡有"+j+"只,小鸡有"+k+"只");
					}
				}
			}
		}
	}
}
public class Demo13 {
	public static void main(String[] args) {
		// 乘法口诀
		for (int i = 1; i <= 9; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(i + "x" + j + "=" + (i*j) + "\t");
			}
			System.out.println();
		}
	}
}
public class Demo14 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		// 3个班,每个班5名同学,输入成绩,计算每个班平均成绩
		for (int i = 1; i <= 3; i++) {
			int sum = 0;
			for (int j = 1; j <= 5; j++) {
				System.out.println("请输入"+i+"班第"+j+"个同学的成绩");
				int score = input.nextInt();
				sum = sum + score;
			}
			System.out.println(i + "班平均成绩为:" + sum / 5.0);
		}
	}
}

注意:在嵌套循环时,使用break或continue只对当前循环有效。

public class Demo15 {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			for (int j = 1; j <= 10; j++) {
				if(i * j > 20) {
					System.out.println("i=" + i + ",j=" + j);
					break; // 此处的break只会将里层循环结束,外层的循环还会继续执行,可以换成return用来终止整个循环(跳出方法)
				}
			}
		}
	}
}