循环结构
一、循环的概念
在程序中,有条件的重复执行一段代码的过程叫做循环。
循环需要满足以下几个条件:
- 1、有循环执行的内容
- 2、有循环终止的条件
- 3、在每次循环过程中能够对条件所涉及的变量值进行改变
二、while循环
2.1 循环的语法
语法:
while(条件){
// 代码块
}
执行流程:
- 先判断条件是否成立,如果成立则执行代码块
- 代码块执行完毕后,再次判断条件是否成立,如果成立则再次执行代码块
- 重复上面两个步骤,直到条件不成立则结束循环
public class Demo1 {public static void main(String[] args) {byte n = 5;while(n > 1) {System.out.println("我很好,很厉害" + n);n--;}}}
2.2 循环的组成
public class Demo2 {public static void main(String[] args) {// 定义一个初始变量,来控制循环// 1、初始变量int n = 0;// 目标是循环一百次// 2、循环条件while(n < 100) {// 打印100次Hello, world// 3、循环的业务(内容)System.out.println("hello, world==" + n);// 4、条件变量的改变n++;}}}
2.3 案例
public class Demo4 {public static void main(String[] args) {// 求1...10的乘积,结果是// 循环的初始变量int n = 1;int sum = 1;while(n <= 10) {sum = sum * n;System.out.println("第"+n+"次=" + sum);n++;}System.out.println(sum);}}public class Demo5 {public static void main(String[] args) {// 求1...100的偶数之和,结果是// 循环的初始变量// 从1到100,判断是否偶数,偶数就加int n = 1;int sum = 0;while(n <= 100) {System.out.println("第"+n+"次");if(n % 2 == 0) {sum += n;System.out.println("计算结果相加为: " + sum);}n++;}System.out.println(sum);// 使用简单算法,减少循环次数// int n = 2;// int sum = 0;// while(n <= 100) {// sum += n;// n += 2;// }// System.out.println(sum);}}public class Demo6 {public static void main(String[] args) {// 求1...100以内与7无关的数字之和int n = 1;int sum = 0;while(n <= 100) {/****此处写逻辑start****/if(!(n % 7 == 0 || n % 10 == 7 || n / 10 == 7)) {sum += n;}/****此处写逻辑end*****/n++;}System.out.println(sum);}}
三、do-while循环
3.1 基本语法
语法:
do{
// 代码块
}while(条件);
执行流程:
- 先执行一次代码块
- 再判断条件是否成立,如果成立,再执行一次代码块
- 再判断条件是否成立,如果成立,再执行一次代码块,再次判断,直到条件不成立则循环终止。
public class Demo7 {public static void main(String[] args) {// 求1...100之和int n = 1;int sum = 0;do{sum += n;n++;}while(n<=100);System.out.println(sum);}}
3.2 使用场景
简单的一个使用场景:
如果需要先执行一次,才有判断条件的情况下,需要使用do-while
public class Demo9 {public static void main(String[] args) {Scanner input = new Scanner(System.in);char answer; // 先不赋值do{System.out.println("抄写一次代码");System.out.println("请老师输入评语:y/n");// 在执行过程中赋值answer = input.next().charAt(0);}while(answer != 'y');}}
注意:一般情况下,while和do-while更适用于循环次数不固定的业务。
四、for循环
4.1 基本语法
语法:
for(初始化变量; 条件; 迭代部分){
// 代码块
}
执行流程:
- 初始化变量,仅执行一次
- 判断条件,成立则执行代码块
- 执行迭代部分,再判断条件,成立则再执行代码块,再执行迭代部分,再判断条件,直到条件不成立则循环终止。
public class Demo10 {public static void main(String[] args) {// 输出100次Hello, worldfor(int n = 0; n<100; n++) {System.out.println("hello, world" + n);}}}
4.2 简单案例
// 求1-100的和public class Demo11 {public static void main(String[] args) {// 求1-100的和int sum = 0;for (int i = 1; i <= 100; i++) {sum += i;}System.out.println(sum);}}public class Demo12 {public static void main(String[] args) {// 求1-10的乘积Scanner input = new Scanner(System.in);System.out.println("请输入一个数字:");int n = input.nextInt();int sum = 1;for (int i = 1; i <= n; i++) {sum *= i;}System.out.println(sum);}}public class Demo13 {public static void main(String[] args) {// 求5个人的平级成绩Scanner input = new Scanner(System.in);int sum = 0;for (int i = 0; i < 5; i++) {System.out.println("请输入第"+(i+1)+"个同学的成绩:");int score = input.nextInt();sum += score;}System.out.println(sum);double avg = (double)sum / 5;System.out.println("平均分为:" + avg);}}public class Demo14 {public static void main(String[] args) {// 输出所有5位回文数for (int n = 10000; n < 100000; n++) {if(n / 10000 == n % 10 && n / 1000 % 10 == n / 10 % 10) {System.out.println(n);}}}}
五、流程控制
5.1 break
break:表示在循环过程中,终止循环。
public class Demo15 {
public static void main(String[] args) {
// 流程终止
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
System.out.println(i + "====" + sum);
if(sum > 1000) {
// 终止循环
break;
}
}
}
}
public class Demo16 {
public static void main(String[] args) {
// 求两个数的最小公倍数
int n = 15;
int m = 20;
for (int i = 1; i <= n * m; i++) {
// 判断数字是否公倍数
if(i % n == 0 && i % m == 0) {
System.out.println(i);
break;
}
}
}
}
public class Demo17 {
public static void main(String[] args) {
// 求两个数的最大公约数
int n = 12980;
int m = 21200;
for (int i = n; ; i--) {
if(n % i == 0 && m % i == 0) {
System.out.println(i);
break;
}
}
}
}
5.2 continue
表示跳过当次循环,继续下一次循环。
public class Demo18 {
public static void main(String[] args) {
// 打印所有偶数
for (int i = 0; i < 100; i++) {
// 当为奇数时,continue表示跳过当次循环(即当次循环中continue后面的代码不再执行),继续下一次循环
if(i % 2 != 0) {
continue;
}
System.out.println(i);
}
}
}
public class Demo19 {
public static void main(String[] args) {
// 求100以内所有奇数之和,使用continue
int sum = 0;
for (int i = 1; i <= 100; i++) {
if(i % 2 == 0) {
continue;
}
sum += i;
}
System.out.println(sum);
}
}
六、嵌套循环
public class Demo20 {
public static void main(String[] args) {
// 10个班,每班10个学生,输出学生编号
for (int i = 1; i <= 10; i++) {
System.out.println(i + "班");
for (int j = 1; j <= 10; j++) {
System.out.println(j + "号学生");
}
}
}
}
public class Demo21 {
public static void main(String[] args) {
// 百钱百鸡问题,100文钱要买100只鸡,公鸡5文,母鸡3文,小鸡3只1文,请问公鸡母鸡小鸡各几何。
for (int i = 0; i <= 100 / 5; i++) {
for (int j = 0; j <= 100 / 3; 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 Demo22 {
public static void main(String[] args) {
// 打印100以内所有的质数
for (int i = 2; i < 100; i++) {
boolean b = false;
for (int j = 2; j < i; j++) {
if(i % j == 0) {
b = true;
break;
}
}
if(b == false) {
System.out.println(i + "是质数");
}
}
// int i = 11;
// boolean b = false;
// for (int j = 2; j < i; j++) {
// if(i % j == 0) {
// b = true;
// break;
// }
// }
// if(b == false) {
// System.out.println(i + "是质数");
// }
}
}
public class Demo23 {
public static void main(String[] args) {
// 3个班,每个班5个同学,求该班的平级成绩
Scanner input = new Scanner(System.in);
for (int n = 0; n < 3; n++) {
System.out.println("第"+(n+1)+"个班");
// 求5个人的平级成绩
int sum = 0;
for (int i = 0; i < 5; i++) {
System.out.println("请输入第"+(n+1)+"个班第"+(i+1)+"个同学的成绩:");
int score = input.nextInt();
sum += score;
}
System.out.println(sum);
double avg = (double)sum / 5;
System.out.println("第"+(n+1)+"个班平均分为:" + avg);
}
}
}
