循环
一、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用来终止整个循环(跳出方法)
}
}
}
}
}