Java中的循环语句

作者:韩茹

任务

1. 循环的功能
2. 循环的分类
3. for循环
4. while循环
5. do/while 循环
6. 多层循环嵌套
7. 特殊的流程控制

一、循环语句

循环语句有哪些功能?为什么要使用循环语句。

1.1 循环的作用
在循环条件满足的情况下,反复执行特定代码
1.2 为什么要使用循环
当我们要打印100次helloworld
或者我们想实现1-10的加和
1+2+3+4+5....
int sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
sum = sum + 4;
sum = sum + 5; 
可以发现有一些是相同的内容。这些相同的内容我们就可以采用循环的方式来实现
1.3 循环的分类
  1. for 循环
  2. while 循环
  3. do/while 循环
1.4 循环的组成部分
  1. 初始化部分:对循环变量赋初值
  2. 循环条件部分:判断循环变量是否超出某个界限
  3. 循环体部分:要循环执行的具体逻辑.
  4. 迭代部分:修改循环变量的值

二、while循环

while循环是比较简单的 一种循环语句。

2.1 语法格式:
while (boolean表达式) {语句块}
2.2 执行过程
先判断表达式的值。若=true.则执行其后面的语句,然后再次判断条件并反复执行,直到条件不成立为止

Java循环实验报告 java循环语句实验目的_System

示例代码:

public class Demo29While {

	public static void main(String[] args) {
		/*
		 *  while (boolean表达式) {语句块}
		 *  
		 *  示例:
		 *  while(活着){
		 *  	心脏跳一下
		 *  }
		 */
		//使用while循环,打印1-100的 数字
		
		int i = 1;
		
		while(i <= 100){
			System.out.println(i);//1,2,3,4...100
			i++;
		}
	
		System.out.println("i--->"+i);
	}
}

运行结果:

Java循环实验报告 java循环语句实验目的_System_02

2.3 练习题

课堂练习1:打印输出5次helloworld

// 初始化部分
  int count = 0;
  // 2循环条件 
  while(count<5){//  1 2 3 
  // 3 循环体
    System.out.println("hello world");
    count++;
  }

课堂练习2:打印输出 1–10

int i =1;
while(i<=10){
	System.out.println(i);
 	i++;
}

课堂练习3:打印10-1的数字

//1.打印10-1的数字
		int i = 10;
		
		while(i > 0){
			System.out.println(i);//10,9,8,7...1
			i--;
		}
		System.out.println("-----------------");

课堂练习4:求 100以内的 偶数的和

int z = 2;
while(z<=100){
    System.out.println(z);
   	z+=2;
}

课堂练习5:求10 的阶乘

int sum = 1;
int j = 1;
while(j<=10){
   	sum=sum*j;
   	j++;
}
System.out.println("1-10的加和"+sum);

课堂练习6:打印1-100内,能够被3整除,但是不能被5真出的数字。统计个数。每行打印5个数。

int i = 1;	
		int count = 0;//计数器
		
		while(i <= 100){
			if(i % 3 == 0 && i % 5 != 0){
				System.out.print(i+"\t");//\t一个制表符
				count++;//5,10,15,20...
				if(count % 5 == 0){
					System.out.println();//换行
				}
			}
			i++;
			
		}
		System.out.println();
		System.out.println("count--->"+count);

三、do-while循环

3.1语法格式
do   {语句块}while(表达式) ;
3.2 执行过程
先执行语句,再判表达式的值,若为true,再执行语句,否则结束循环

Java循环实验报告 java循环语句实验目的_java_03

示例代码:

public class Demo30DoWhile {

	public static void main(String[] args) {
		/*
		 *  do{
		 *		语句块;
		 *
		 *	}while (boolean表达式);
		 *  
		 */
		//使用do-while循环,打印1-10的 数字
		
		int i = 1;

		do{
			System.out.println(i);
			i++;
		}while(i<=10);
		

		
		System.out.println("i--->"+i);
	}

}

运行结果:

Java循环实验报告 java循环语句实验目的_for循环_04

3.3 练习题

课堂练习1:打印三次helloworld

// 1 初始化部分
int i = 0;
do{
   // 2 循环体
   System.out.println("Hello World!");
   // 4 迭代部分
	i++;
}while(i<3);// 3 循环条件

课堂练习2:用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);

课堂练习3:100 以内 能够被3整除 但是不能被5整除的数 打印输出

int z = 3;
do{
	if(z%3==0 && z%5!=0){
	    System.out.println(z);
	}
	z++;
}while(z<100);

课堂练习4:猜数游戏

import java.util.Scanner;

public class GuessNumber {

	public static void main(String[] args) {
		/*
		 * 猜数游戏:
		 * 1.程序中先产生一个随机数:[1,100]	55
		 * 
		 * 2.用户键盘输入:30	80	50	70	60	55
		 * 
		 * String类:字符串
		 * System类:系统类,
		 * 		System.out.println();
		 * Scanner类:键盘输入
		 * Math类:数学类
		 * 
		 * 
		 */
		
		//step1:系统产生随机数:
//		double d = Math.random();//[0.0,1.0),包含0,但是不包含1。
//		System.out.println(d);
//		System.out.println((int)(d*100)+1);//[0,100)-->[1,100]
		
		int ranNum = (int)(Math.random()*100+1);
		System.out.println(ranNum);
		
		//step2:循环,键盘输入,猜数
		Scanner scan = new Scanner(System.in);
		
		int n = 0;//玩家猜测的数字
		int count = 0;//表示猜测的次数
		
		do{
			System.out.println("请输入猜测数字的大小[1,100]:"+"第"+(++count)+"猜测:");
			n = scan.nextInt();		
			//判断猜测
			if (n < ranNum) {
				System.out.println("猜小了,下次大点。。。");
			}else if(n > ranNum){
				System.out.println("猜大了,下次小点。。");
			}else{
//				System.out.println("猜对了,哈哈哈哈哈哈哈。。。。");
//				break;
			}
		}while(n != ranNum);
		
		System.out.println("猜对了,哈哈哈哈哈哈哈。。。。");
		System.out.println("随机数是:"+ranNum);
	}

}
3.4 对比while和do-while

while 和 do/while 的区别:

while 先执行 循环条件 然后在执行 循环体

do/while 先执行 循环体 然后在执行 循环条件

当第一次 就不满足循环条件的情况下 while循环不能执行循环体, dowhile 可以执行一次

四、 for循环

4.1 语法格式
for (表达式1 [循环变量初始值设定]; 表达式2 [循环条件判断]; 表达式3 [改变循环变量的值]){
         	循环体
}
4.2 执行过程
首先计算表达式1,接着计算表达式2,若表达式2的值=true,则执行循环体,接着计算表达式3,再判断表达式2的值.依此重复下去,直到表达式2的值=false。

Java循环实验报告 java循环语句实验目的_System_05

示例代码:

public class Demo31For {

	public static void main(String[] args) {
		/*
		 * for (表达式1 [循环变量初始值设定]; 表达式2 [循环条件判断]; 表达式3 [改变循环变量的值]){
         	循环体//4
			}
			
			先执行表达式1:只执行1次。习惯用于变量的初始化。
			
			表达式2:作为循环的条件,必须是boolean类型:true,false
			
			为true,执行循环体
			
			再执行表达式3:跟在循环体之后执行的,习惯用于变量的变化。步长。
			
			1-->2-->4-->3-->2-->4-->3-->2-->4-->3-->2...
			
		 */
		//1.打印10次helloworld
		for ( int i = 1;i<=10 ; i++){
			//循环体//4
			System.out.println("Hello World..--->"+i);//i:1,2,3,4...10
		}
		System.out.println("over...");
//		System.out.println(i);//11
	}

}

运行结果:

Java循环实验报告 java循环语句实验目的_java_06

4.3 练习题

课堂练习1:打印三次helloworld

for(int i = 0;i<3;i++){
	System.out.println("Hello World!");
}

课堂练习2: 打印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");
		}		
	}
}

课堂练习3: 行酒令

public class Loop {

	public static void main(String[] args) {
		/*
		 * 行酒令:逢7过
		 * 
		 * 打印1-100内的数字:但是如果这个数字包含了7,或者是7的倍数,就不打印。
		 * 
		 * 7的倍数:7,14,21,28,35.。。。
		 * 
		 * 包含了7:17,27,37,47.。。70,71,72.。。。78,79,87,97 
		 * 个位数字,十位数字,不能是7
		 * 
		 * 个位数字:i % 10 --->个位数字 
		 * 十位数字:i / 10 --->十位数字
		 */
		for (int i = 1; i <= 100; i++) {

//			if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7) {
//				System.out.println("-------过");
//			} else {
//				System.out.println(i);
//			}
			
			if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7) {
				continue;
			}
			System.out.println(i);

		}
	}

}
4.4 for循环的特殊形式
1. 表达式2一般不可省略,否则为无限循环
 for (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)语句
  for ( ; i<=100;    ) {sum+=i; i++;}
4. 三个表达式均省略 即for(;;)语句,此时相当于while(true)语句.

示例代码:

public class Demo32For {

	public static void main(String[] args) {
		/*
		 * for循环
		 * 标准的写法for循环:
		 * for(表达式1;表达式2;表达式3){
		 * 	循环体;
		 * }
		 * 
		 * for循环还有特殊的写法:
		 * 1、表达式2如果省略:永真,死循环
		 * 		循环条件默认是true。
		 * 
		 * 2、表达式3如果省略:
		 * 		本来是在循环体之后执行的,通常用于控制循环变量的变化。
		 * 	
		 * 3、表达式1如果省略:
		 * 
		 * 4、表达式1,2,3全都省略不写
		 * 	for(;;){}
		 * 	while(true){}
		 * 
		 * 5、for循环里,如果只有一行代码,{}也可以省略不写的。不建议。
		 */
		int i = 1;
		
		for(; i <= 10;i++)
			System.out.println(i);
		
		
		System.out.println("helloworld");
			
			
//		System.out.println("--->"+i);
	}

}
4.5 几种循环的比较
1. 对于同一问题, 三种循环可相互替代
2. for循环功能强于while, do…while.但若不是明显地给出循环变量初终值(或修改条件),则可以用while 或do …while.以增强程序的结构化和可读性。
3. 要防止无限循环––死循环。

五、多循环嵌套

5.1 循环嵌套

多重循环就是循环中嵌套其他循环。

特点:外层循环执行一次,内层循环执行一遍。

示例代码:

public class Demo07Loop {

	public static void main(String[] args) {
		/*
		 * 多层循环嵌套:
		 * 
		 * 外层循环i的值,每变化一次,里层j的循环,完整的执行1遍。
		 */
		for (int i = 1; i < 5; i++) {
			for (int j = 1; j < 5; j++) {
				System.out.println("i:" + i + ", j:" + j);
			}
		}
	}

}

课堂画图:

Java循环实验报告 java循环语句实验目的_i++_07

5.2 练习题

课堂练习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
		 * 1*2=2 2*2=4
		 * 1*3=3 2*3=6 3*3=9
		 * 1*4=4 2*4=8 3*4=12 4*4=16
		 * 。。。
		 * 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 。。。9*9=81
		 * 
		 * i*j
		 * 
		 * 行:	i	j
		 * 1行	1	1
		 * 2行	2	1,2
		 * 3行	3	1,2,3
		 * 4行	4	1,2,3,4
		 * 5行	5	1,2,3,4,5
		 * 。。。
		 * 9行	9	1,2,3,4,5,6,7,8,9
		 * 
		 */
		for(int i = 1;i<10;i++){//行
			for(int j = 1;j<=i;j++){
				System.out.print(j+"*"+i+"="+i*j+"\t");
			}
			System.out.println();//换行
		}

课堂练习4:累乘2

/*					2         5 
2				2*10的0次方
22				2*10的1次方   + 2 
222				2*10的2次方  + 22 
2222			2*10的3次方  + 222
22222
*/
// 求 10 的2次方
int  num5 =  (int)(Math.pow(10,4))*2;
// 固定的  10     
//  几次方   上一次的结果
// 要求  把所有的  数据求和
int result = 0;
int sum = 0;
for (int i = 0;i<5 ;i++ )
{
   	int  num =  (int)(Math.pow(10,i))*2+result;
    sum = sum+num;
   	System.out.println(num);
   	result = num;
}
System.out.println("加和是"+sum);

课堂练习4:输出等腰三角形

Java循环实验报告 java循环语句实验目的_java_08

分析:此题只需打印上三角即可。

Java循环实验报告 java循环语句实验目的_for循环_09

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

六、特殊流程控制语句

用于控制程序流程结构的两个语句,一个是break,另一个是continue。

6.1 break语句

**break:**语句用于终止某个语句块的执行

默认跳出离自己最近的循环

  • 使用场合
  • switch结构中:跳出(终止)switch语句
  • 循环结构中:跳出(终止)循环
  • 作用:退出switch和循环结构(如果有多重循环,默认跳出离自己最近的循环)。

示例代码:

public class Demo34BreakContinue {

	public static void main(String[] args) {
		/*
		 * 循环如何结束?
		 * 
		 * 正常情况下,循环条件不成立,循环就自动结束了。
		 * 
		 * break:词义“打破,破坏” 
		 * 
		 * 用法一:在switch-case语句中,用于结束switch语句
		 * 
		 * 用法二:在循环语句中,一个循环中,一旦执行了break语句,那么该循环就彻底的结束了,无论循环条件是否满足。
		 * 
		 * continue:词义"继续"
		 * 	循环中,用于结束某一次循环,下次继续执行。
		 * 	"跳过"的意思
		 * 
		 */

		for (int i = 1; i <= 10; i++) {
			if(i == 5){
//				break;//强制结束循环
				continue;
			}
			System.out.println(i);
		}
		System.out.println("over...");
	}

}

使用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命令

6.2 continue

**continue:**语句用于跳过某个循环语句块的一次执行,继续下一次执行

  • 使用场合
  • continue只能用在循环结构中
  • 作用: 跳过本次循环,执行下一次循环(如果有多重循环,默认继续执行离自己最近的循环)。)

使用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!");

踩坑:while和dowhile中使用continue,要小心,不要写入死循环。

示例代码:

public class Demo35{
	public static void main(String[] args) {
		int i = 1;
		/*
		while(i <= 10){
			if(i == 5){
				continue;
			}
			System.out.println(i);
			i++;
		}
		*/
		do{
			if(i == 5){
				continue;
			}
			System.out.println(i);
			i++;
		}while(i<=10);
	}
}

Java循环实验报告 java循环语句实验目的_for循环_10