Java程序猿必学第四篇——简单的循环

//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();  //回车
}

猜你喜欢

转载自blog.csdn.net/m0_62718093/article/details/120771315
今日推荐