//1.循环(重点)
//1.1 while循环
//=======================while循环===========================
//案例:打印100遍“helloworld”
//int i = 1000; //如果初始为1000,则一次都不执行
int i = 1; //初始化语句-与条件判断有关
int b = 1; //初始化语句? 不是
while(i<=100){ //条件判断
System.out.println("helloworld-"+i); //循环体
i++; //增量语句-要为条件判断服务
b++; //增量语句? 不是
}
//while循环特点: 先判断再执行,执行次数为0~n次; 适用于循环次数可预见的情况
//=======================while案例===========================
//课堂案例1:计算1~100的总和
//分析:1.先循环1~100 2.进行累加
int i=1;
int sum=0; //求和的变量初始为0
while(i<=100){
sum += i; //sum = sum+i;
i++;
}
System.out.println("求和:"+sum);
//案例2:1~100之间所有偶数和
//分析:1.先循环1~100 2.判断为偶数,才累加
i = 1;
sum = 0;
while(i<=100){
if(i%2==0){
sum += i;
}
i++;
}
System.out.println("1~100的偶数和:"+sum);
//1.2 dowhile循环
//======================dowhile循环========================
//dowhile循环
//语法结构:
/*
初始化语句
do{
循环体语句;
增量语句
}while(条件判断);
//执行流程:
1.初始化语句--只执行一次
2.执行循环体语句
3.增量语句
4.条件判断,条件成立,回到第2句继续执行循环体;否则,跳出循环
*/
//案例: 打印100遍helloworld
//int i=1000; //也会打印1遍
int i = 1; //初始化语句
do{
System.out.println("hello,world-"+i);
i++;
}while(i<=100);
//dowhile特点:先执行,后判断,至少执行一次;适用于循环次数不可预见
//======================dowhile案例========================
//案例:学生先抄写作业,老师给出评语,判断是否需要继续抄写
//while:
/*
System.out.println("学生正在抄写作业...");
System.out.println("抄写作业完毕...");
System.out.println("请判断是否需要继续抄写:(y/n)");
Scanner sc = new Scanner(System.in);
char flag = sc.next().charAt(0);
while(flag=='y'){
System.out.println("学生正在抄写作业...");
System.out.println("抄写作业完毕...");
System.out.println("请判断是否需要继续抄写:(y/n)");
flag = sc.next().charAt(0);
}
System.out.println("抄写完毕~!");
*/
//dowhile-先执行,后判断; 适用于循环次数不可预见
Scanner sc = new Scanner(System.in);
char flag;
do{
System.out.println("学生正在抄写作业...");
System.out.println("抄写作业完毕...");
System.out.println("请判断是否需要继续抄写:(y/n)");
flag = sc.next().charAt(0);
}while(flag=='y');
System.out.println("抄写完毕~!");
//1.3 for循环(最常用)
//======================for循环========================
//for循环(最常用)
/*
语法结构:
for(初始化语句;条件判断;增量语句){
循环体语句;
}
//执行流程: 和while很类似
1.初始化语句--只执行一次
2.条件判断;如果成立,则执行循环体;否则跳出循环
3.循环体语句
4.增量语句; 回到第2句继续判断
*/
//案例:打印100遍helloworld
for(int i=1;i<=100;i++){
System.out.println("helloworld-"+i);
}
//System.out.println(i); //外围不是i的作用域了
//for特点:和while类似,先判断,后执行,循环次数为(0~n次);适用循环次数可预见的情况
//======================for循环案例========================
//案例1:请输入一个数n,求n的阶乘 例如3的阶乘: 1*2*3
/*
System.out.print("请输入求阶乘的数:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int ji = 1; //求积,初始为1
for(int i=1;i<=n;i++){
ji *= i; //ji = ji*i;
}
System.out.println(n+"的阶乘为:"+ji);
*/
//案例2:请输入5名同学的分数,并求出平均分
//分析:1.循环5次从控制台录入 2.通过一个变量,将分数累加 3.再除以5
/*
double sum = 0; //求和的变量
for(int i=1;i<=5;i++){
System.out.print("请输入第"+i+"个学员成绩:");
int score = sc.nextInt();
sum += score;
}
System.out.println("平均分为:"+(sum/5));
*/
//三种循环的应用场景:
//1. 先判断,后执行,且循环次数可预见--for,while
//2. 先执行后判断,且循环次数不可预见--dowhile
//======================死循环问题========================
//关于死循环问题:
//-------需要避免的死循环--------
/*
for(int i=10;i>1;i++){
System.out.println("需要避免的死循环--增量语句与条件判断无关");
}*/
//----------漂亮死循环-------------
/*
for(;;){
System.out.println("漂亮死循环...");
}*/
//--------最漂亮(常用)的死循环-------
while(true){ //do{}while(true);
//一般做控制台录入
System.out.println("常用的死循环...");
}
//2. 循环控制(重点)
//循环控制关键字: break,continue
//======================continue========================
//案例1:循环打印1~10,除了3的倍数不打印---1,2,4,5,7,8,10
//分析,1,先将1~10进行循环 2.判断3的倍数不打印
/*for(int i=1;i<=10;i++){
if(i%3==0){
continue; //跳出当前循环,不影响下一次循环的执行
}
System.out.println(i);
}*/
//======================break========================
//案例2:循环打印1~10,遇到3的倍数则结束循环----1,2
for(int i=1;i<=10;i++){
if(i%3==0){
break; //跳出循环
}
System.out.println(i);
}
//应用场景:
//continue: 用在循环中,跳出当次循环的情况
//break:用在switch和循环中,结束switch和循环
//======================综合案例========================
//猜数字游戏:请猜1~1000以内的数:
/*例如:答案为600(随机)
输入:500---小了
输入:700---大了
输入:600---恭喜中500万,请全班吃饭;(退出循环)
升级1: 加入随机数
升级2: 加入范围提示---最大值max 最小值min
升级3: 加入异常判断,如果输入的数比min小或比max大
*/
//Math.random(); 0.0~1.0的double类型值: 0.0<=x<1.0
//Math.random()*1000 0.0~1000 0.0<=x<1000
int daAn = (int)(Math.random()*1000)+1; //1<=x<=1000 答案用随机数表示
Scanner sc = new Scanner(System.in);
int min = 1;
int max = 1000;
do{
System.out.print("请输入"+min+"~"+max+"以内的数:");
int num = sc.nextInt();
//如果录入的值比最大值还大,或者比最小值还要小,则该值无意义
if((num<min)||(num>max)){
System.out.println("您的输入有误,请重新输入~");
continue; //如果出现问题,则直接返回
}
if(num>daAn){ //录入的值大于答案
System.out.println("大了");
max = num-1; //最大值变了
}else if(num<daAn){
System.out.println("小了");
min = num+1; //最小值变了
}else{
System.out.println("恭喜你,中了500万,请全班吃饭~");
break;
}
}while(true);
//3.循环嵌套
//======================循环嵌套========================
//循环嵌套: 在循环中,再包含循环
/*
打印3行4列的*
****
****
****
分析:先考虑打印1行4列--每次打印1颗星,循环4次
*/
for(int i=1;i<=3;i++){ //外层打印行
//****
for(int j=1;j<=4;j++){ //内层打印列
System.out.print("*");
}
System.out.println(); //回车
}
//======================嵌套案例========================
//计算3个班,每个班5名同学的平均成绩
//分析:可以看成3行5列学员录入
Scanner sc = new Scanner(System.in);
for(int i=1;i<=3;i++){
double sum = 0;
for(int j=1;j<=5;j++){
System.out.print("请输入第"+i+"个班,第"+j+"名学员成绩:");
int score = sc.nextInt();
sum += score; //学员成绩累加
}
System.out.println("第"+i+"个班的平均分为:"+(sum/5));
}
//==================打印直角与等腰三角形====================
/*
打印4行4列的直接三角形
*
**
***
****
分析:外层循环4次(4行),内层循环次数根据外层而变化
*/
for(int i=1;i<=4;i++){ //i=1
for(int j=1;j<=i;j++){ //打印1列
System.out.print("*");
}
System.out.println(); //回车
}
/*
打印4行的等腰三角形
*
***
*****
*******
分析:1.外层循环4次(4行),内层循环次数根据外层而变化
2.在内层循环前面先推空格,第1行推3个空格,第2行2个,第三行1个
*/
for(int i=1;i<=4;i++){ //i=1,i=2
for(int j=1;j<=4-i;j++){ //i为1,则打印3个空格 i为2,则打印2个空格..
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.println(); //回车
}
Java程序猿必学第四篇——简单的循环
猜你喜欢
转载自blog.csdn.net/m0_62718093/article/details/120771315
今日推荐
周排行