08_Java筑基之循环语句
一. 循环结构
1. 什么是循环
循环就是在循环条件满足的情况下,反复执行特定代码.
2. 为什么要使用循环
当我们要打印100次helloworld,
或者我们想实现1-100的和,那么如何做?
1+2+3+4+5....
int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
sum = sum + 4;
sum = sum + 5;
可以发现有一些是相同的内容,这些相同的内容我们就可以采用循环的方式来实现.
3. 循环的分类
1. while 循环;
2. do/while 循环;
3. for循环.
4. 循环的组成部分
1.初始化部分:对循环变量赋初值;
2.循环条件部分:判断循环变量是否超出某个界限;
3.循环体部分:要循环执行的具体逻辑;
4.更新循环变量部分:修改循环变量的值.
二. while循环
1. 格式
while(循环条件){
语句块(循环体)
}
2. 执行过程
先判断循环条件表达式的值,若为true,则执行循环体,然后再次判断条件并反复执行,直到条件不成立为止.
特点:先判断再执行.
3. while循环练习
练习一:
需求: 打印输出5次helloworld
//1.初始化部分
int count = 0;
//2. 循环条件
while(count<5){
//3.循环体
System.out.println("hello world");
//4. 更新循环变量
count++;
}
练习二:
需求: 打印输出 1--10
int i =1;
while(i<=10){
System.out.println(i);
i++;
}
练习三:
求1-100的和
//1.初始化变量
int i=1;
int sum=0;//保存和
//2.循环条件
while(i<=100){
sum=sum+i;//sum+=i;
i++;
}
System.out.println("1-100的和是:"+sum);
练习四:
需求: 求 10 的阶乘.
int sum = 1;
int j = 1;
while(j<=10){
sum=sum*j;
j++;
}
System.out.println("10的阶乘"+sum);
练习五:
需求: 求 100以内的 偶数的和.
int z=2;
int sum=0;
while(z<=100){
sum=sum+z;
z+=2;
}
System.out.println("1-100的偶数的和是:"+sum);
或:
int z=1;
int sum=0;
while(z<=100){
if(z%2==0){
sum=sum+z;
}
z++;
}
System.out.println("1-100的偶数的和是:"+sum);
三. do-while循环
1. 格式
do {语句块} while(条件表达式);
2. 执行过程
先执行语句,再判表达式的值,若为true,再执行语句,否则结束循环.
特点:先执行,再判断.
3. 练习
练习一
需求: 打印三次helloworld
//1. 初始化部分
int i = 0;
do{
//2.循环体
System.out.println("Hello World!");
//4.循环变量变化部分
i++;
}while(i<3);//3.循环条件
练习二
用do/while实现打印100以内的奇数
int j = 1;
do{
/*if(j%2==1){
System.out.println(j);
}
j++;*/
System.out.println(j);
j+=2;
}while(j<100);
练习三
求 100 以内能够被3整除,但是不能被5整除的数打印输出.
int z = 3;
do{
if(z%3==0 && z%5!=0){
System.out.println(z);
}
z++;
}while(z<=100);
4. while 和 do-while的区别
1. 执行过程不同:
while 先执行循环条件,然后再执行循环体,一句话:先判断,再执行;
do/while 先执行循环体,然后再执行循环条件,一句话:先执行,再判断.
2. 当第一次不满足循环条件的情况下:
while循环不能执行循环体, do while 可以执行一次.
四.for循环
1. 格式
for(表达式1[循环变量初始化];表达式2[循环条件判断]; 表达式3[更新循环变量]){
循环体
}
2. 执行过程
首先计算表达式1,接着计算表达式2,若表达式2的值为true,则执行循环体,接着计算表达式3,再判断表达式2的值.
依次重复下去,直到表达式2的值为false.
特点:先判断,再执行.
3. 练习
练习一:
需求: 打印输出3次hello World
for(int i = 0;i<3;i++){
System.out.println("Hello World!");
}
练习二:
打印100以内能被4整除但不能被7整除的数据,每行打印6个.
int count = 0;
for(int i = 1; i<=100; i++){
if(i%4==0 && i%7!=0){
System.out.print(i+"\t");
count++;// 6
if(count%6==0){
System.out.print("\n");
}
}
}
练习三:
使用for实现1-100的和.
public class Demo11{
public static void main(String[] args){
int sum=0;
for(int i=1;i<=100;i++){
sum+=i;
}
System.out.println("1-100的和是:"+sum);
}
}
练习四:
实现加法表,比如用户输入数字6:
0+6=6
1+5=6
2+4=6 ...
6+0=6
import java.util.Scanner;
public class Demo12{
public static void main(String[] args{
Scanner input=new Scanner(System.in);
System.out.println("请输入一个数字");
int num=input.nextInt();
for(int i=0,j=num;i<=num;i++,j--){
System.out.println(i+"+"+j+"="+(i+j));
}
}
}
4. for循环的特殊形式
1. 省略表达式2:
表达式2一般不可省略,否则为无限循环(死循环)
for (int i=1; ; i++) sum=sum+i;
// 相当于条件永真、永不为false;
2. 表达式3亦可省略,但在循环体中须有语句修改循环变量;以使表达式2在某一时刻为false而正常结束循环.
for (int sum=0,i=1 ;i<=100; ){
sum=sum+i;
i++;
}
3. 若同时省略表达式1和表达式3,则相当于while(表达式2)语句:
int i=0;
for( ;i<=100;){
sum+=i;
i++;
}
4. 三个表达式均省略,即for(;;)语句,此时相当于while(true)语句.
5. 三种循环的比较和注意事项
三种循环的比较:
1. 语法不一样:
while(条件){...}
do{...}while(条件);
for(表达式1;表达式2;表达式3){...}
2. 执行顺序不同:
while 和 for 都是先判断条件,然后再执行循环体;
do while 先执行循环体,再判断条件.
注意事项:
1.对于同一问题,三种循环可以相互替代;
2.循环次数确定的情况优先选用for循环,循环次数不确定的情况,通常选用while和do-while循环;
3.要防止无限循环---死循环.
五. 多重循环之二重循环
多重循环就是循环中嵌套其他循环.
特点:
外层循环执行一次,内层循环执行一遍.
1. 练习一,使用*号打印矩形
// 外层循环控制行,内层循环控制列!
// *******
// *******
// *******
// *******
for (int j = 0;j<4 ; j++){
for(int i = 0; i< 7 ; i++){
System.out.print("*");
}
System.out.println();
}
2. 练习二: 打印直角三角形
/*
找规律
* 1 1
** 2 2
***
****
***** 5 5
*/
for(int i = 1;i<=5 ;i++ ){
// 1 2 3 4 5
for(int j = 1;j<=i ;j++ ){
System.out.print("*");
}
System.out.println();
}
3. 练习三: 输出等腰三角形

* 1 1 1*2-1
*** 2 3 2*2-1
***** 3 5 3*2-1
******* 4 7 4*2-1
********* 5 9 5*2-1
* 1 4 5-1=4
*** 2 3 5-2=3
***** 3 2 5-3=2
******* 4 1 5-4=1
********* 5 0 5-5=0
for (int i = 1;i<=5 ;i++ ){ //空格
for(int k=1;k<=5-i;k++){
System.out.print(" ");
}
// 1 2 3 4 5
for (int j = 1;j<=i*2-1 ;j++ ){
System.out.print("*");
}
System.out.println();
}
4. 练习四: 输出九九乘法表
*
**
***
****
*****
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
// 99乘法表
for (int i = 1;i<=9 ;i++ ){
for (int j = 1;j<=i ;j++ ){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
5. 输入学员成绩
一个班级有5个人,3门课程,让你输入每个人每门课的成绩,并打印每个人的总分和平均分.
import java.util.Scanner;
public class Demo18{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
for(int i=0;i<5;i++){//外层循环控制人数
System.out.println("请输入第"+(i+1)+"个人的姓名");
String name=input.next();
double sum=0;//存每个人总分
double avg=0;//存每个人的平均分
for(int j=0;j<3;j++){
System.out.println("输入第"+(j+1)+"门课成绩");
double score=input.nextDouble();
sum+=score;
}
avg=sum/3;
System.out.printf(name+"的总分是:"+sum+",平均分是:%.2f",avg);
System.out.println();
}
}
}
六. 跳转语句--流程控制语句
break: 语句用于终止某个语句块的执行;
continue: 语句用于跳过某个循环语句块的一次执行,继续下一次执行(结束本次循环,继续下一次循环).
1. break
1.1 使用场合:
- switch结构中:跳出(终止)switch语句.
- 循环结构中:跳出(终止)循环.
1.2 作用:
退出switch和循环结构(如果有多重循环,默认跳出离自己最近的循环)
for (int i = 1; i <3 ; i++ ){
for (int j = 1;j<5 ;j++ ){
if(j == 2){
break;//可以指定跳出的循环.
}
System.out.println(i+" "+j);
}
}
2. 使用Lable标签实现跳出指定的循环(了解).
out : for(int i = 1;i <3;i++){//定义一个标签out
for (int j = 1;j<3 ;j++ ){
if(j == 2){
break out;//可以指定跳出的循环
}
System.out.println(i+" "+j);
}
上机练习1:
打印1到10个数,遇到4的倍数程序自动退出.
提示:如果i%4==0,则执行break命令.
上机练习2:
要求:小张参加长跑比赛5000米,一共10圈,如果小张坚持不下来,可以中途退出比赛,使用程序描述这个场景.
import java.util.Scanner;
public class Demo21{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("小张准备参加5000米长跑");
int count=1;
do{
System.out.println("开始跑第"+count+"圈");
System.out.println("跑完了第"+count+"圈");
count++; System.out.println("还能坚持吗?y/n");
String answer=input.next();
if(!answer.equals("y")){
break;
}
}while(count<=10);
System.out.println("比赛结束了....");
}
}
3. continue
-
使用场合:
continue只能用在循环结构中. -
作用: 跳过本次循环,执行下一次循环(如果有多重循环,默认继续执行离自己最近的循环).
for(int i =1;i<4;i++){
for(int j = 1;j<4 ;j++ ){
if(j==2){
continue;
}
System.out.println("i="+i + " j="+j);
}
}
System.out.println("Hello World!");
4. 使用Label标签改变继续执行的循环
out: for(int i = 1;i<4;i++){
for(int j = 1;j<4;j++){
if(j==2){
continue out ;
}
System.out.println("i="+i +" j="+j);
}
}
System.out.println("Hello World!");
上机练习1:
打印1到10个数,遇到4的倍数跳过去.
/* 打印1到10个数,遇到4的倍数跳过去 */
public class Demo23{
public static void main(String[] args){
for(int i=1;i<=10;i++){
if(i%4==0){
continue;
}
System.out.println(i);
}
}
}
上机练习2:
要求:小张参加长跑比赛5000米,一共10圈,如果小张口渴了,喝水后继续跑,使用程序描述这个场景.
/*要求:小张参加长跑比赛5000米,一共10圈,如果口渴了,喝水后继续跑,使用程序这个场景*/
import java.util.Scanner;
public class Demo24{
public static void main(String[] args{
Scanner input=new Scanner(System.in);
System.out.println("小张准备参加5000米长跑");
int count=1;
do{
System.out.println("开始跑第"+count+"圈");
System.out.println("跑完了第"+count+"圈");
count++;
System.out.println("口渴了吗吗?y/n");
String answer=input.next();
if(answer.equals("n")){//不渴,继续跑
continue;
}
System.out.println("喝口水");
}while(count<=10);
System.out.println("比赛结束了....");
}
}
七. 总结
循环有四部分:
1.循环变量初始化;
2.循环条件;
3.循环体;
4.循环变量更新.
1. 三种循环语句
while:
先判断条件,再执行循环体.
do while:
先执行循环体,再判断条件,至少执行一次.
for:
先判断条件,再执行循环体.
如果循环次数固定优先使用for,如果次数不确定用while和do while.
2. 二重循环(难点)
外层循环执行一次,内存循环执行一遍.
3. 跳转语句
break: 跳出switch和循环;
continue: 结束本次循环,继续下一次循环.