目录
循环结构是为了解决生活中重复发生的场景。
循环结构由三个要素组成,分别为循环变量、循环体和循环终止条件。
- 循环结构:也称为重复结构,程序中反复执行的一组指令或程序段
- 循环体:被反复执行的程序段
- 循环变量:用来控制循环是否继续进行的变量
常见的循环结构有三种,为while循环、do while循环以及for循环。
while结构(次数不固定的循环优先选用)
格式:
变量定义
while(条件){
//循环代码
//变量值的改变
}
图解:
步骤:
第一,循环变量初始化(在while之前);
第二,判断循环条件,如果判断结果为真,则进入循环体;如果为假则不执行循环体;
第三,执行循环体;
第四,执行循环控制变量增量,转入第二步。
案例:
import java.util.Scanner;
/**
* while循环
* 老师每天检查张浩的学习任务是否合格,如果不合格,则继续进行
* 老师给张浩安排的每天的学习任务为:上午阅读教材,学习理论部分
* 下午上级编程,掌握代码部分
*/
public class Demo1 {
public static void main(String[] args) {
//定总循环次数,当前循环次数:需要确定循环的条件
//确定循环的内容
Scanner sc=new Scanner(System.in);
String isPassed="不合格";
while (!"合格".equals(isPassed)){//isPassed与“合格”比较,当isPassed是“合格”的时候,不做循环,即当isPassed不是“合格”的时候做循环
if(!isPassed.equals("不合格")){//循环体内,isPassed不是“合格”。如果isPassed也不是“不合格”,说明输入错误。
System.out.println("您的输入不正确,请重新输入!");
}
else{//不合格,继续布置任务
System.out.println("张浩的学习任务为:上午理论,下午代码");
}
System.out.println("老师检查张浩学习任务的结果:(合格/不合格)");//询问是否合格
isPassed=sc.next();//输入
}
System.out.println("恭喜张浩完成学习任务!");//出了循环,说明张浩合格了
}
}
do-while结构(必须先执行后判断的循环优先使用)
格式:
变量定义
do{
//循环代码
}while(条件);
图解:
步骤:
第一,循环变量初始化(在do while之前);
第二,先执行循环体;
第三,执行循环控制变量增量;
第四,再判断循环条件,如果判断结果为真,则返回第二步;如果为假则直接退出循环。
案例:
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
String result =null;
do{
System.out.println("老师给张浩考题,张浩上机测验,老师检查结果:(合格/不合格)");
result=s.next();
}while (result.equals("不合格"));
System.out.println("恭喜张浩通过测试");
}
}
fori结构(次数固定的循环优先选用)
格式:
for(变量定义;条件;变量值的改变){
//循环代码
}
图解:
步骤:
第一,循环变量初始化;
第二,判断循环条件,如果判断结果为真,进入循环体;如果为假,则循环终止;
第三,执行循环体;
第四,执行循环控制变量增量,转入第二步。
案例:
import java.util.Scanner;
/**
* for循环
* 循环输入某同学结业考试的5门课程成绩,并计算平均分
*/
public class Demo3 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
double sum=0;
int i = 0;
//快捷5.fori()
for (; i < 5; i++) {
System.out.println("请输入第"+(i+1)+"门课的成绩:");
double score=input.nextDouble();
sum+=score;//sum=sum+score;
}
double avg=sum/i;
System.out.println("平均分为:"+avg);
}
}
多重循环
多重循环的特点:
循环中嵌套循环
外层循环的变量变化一次,内层循环的变量变化一整轮
循环控制
break:跳出当前循环体,for循环变量改变的部分不会运行
continue:跳过当前循环体本次循环的后续代码,继续下一轮循环
for循环变量改变的部分会运行
return:跳出当前方法体
System.exit(status:状态码):中断程序,并返回对应的状态码 //强制退出,风险太高,无法恢复,可能导致系统崩溃(不建议用)
练习
1.鸡兔同笼问题
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
提示:定义变量chickenNum、rabbitNum分别表示鸡的数量、兔子的数量,二者有如下两个关系: chickenNum+rabbitNum=35 chickenNum*2+rabbitNum*4=94 鸡的数量chickenNum范围是0<=chickenNum<=35,利用循环结构解决上述问题。
public class ChickenRabbit {
public static void main(String[] args) {
int cNum=0, rNum=0;
for(;cNum<=35;cNum++){
rNum=35-cNum;
if(2*cNum+4*rNum==94){
break;
}
}
System.out.println("鸡有"+cNum+"只,兔有"+rNum+"只。");
}
}
2.计算阶乘
从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1
public class Factorial {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个正整数:");
int num=input.nextInt();
System.out.println(num+"的阶乘为:");
int mul=1;
for(int i=num;i>1;i--){
mul*=i;
System.out.print(i+"*");
}
System.out.println("1="+mul);
}
}