循环结构

循环结构

循环结构:程序反复执行某个或某些操作,直到某条件为假(或真)时才停止循环
特别注意:循环结构必须给出循环出口,否则就是死循环。

Switch循环语句

while型结构:先判断条件,当条件为真时执行循环体,并且在循环体结束时自动返回到循环入口处,再次判断循环条件;
如果条件为假,则退出循环体到达流程出口处。即“先判断,后执行”;
在这里插入图片描述
语法结构:

while(boolean){
 
} 

while 执行流程:
当程序执行到 while 循环时 , 会首先判断小括号里的值 ,如果值
为假 :结束while语句 , 程序继续向下走 (1)
为真 :会把while 循环里大括号里的所有内容执行一次 , 全部执行完毕之后 ,会再度来到条件处 (2)
判断小括号里的值 , 如果值
为假 (1)
为真 (2)
注意: 如果没有 break return ,条件一直为true , 那么循环会一直循环下去

循环输出1到100

/**
 * @author Amanda
 *switch循环输出1到100
 */
public class Test {
	public static void main(String[] args){
		int i = 1;
		while( i <= 100){
			System.out.println(i);
			i++;
		}
		System.out.println("mian-gg");
	}
}

Switch循环输出累加和

/**
 * @author Amanda
 *switch循环输出累加和
 */
public class Test {
	public static void main(String[] args){
		int i = 1;
		int sum = 0;
		while( i <= 100){
			sum += i;
			i++;
		}
		System.out.println("sum = " + sum);
		System.out.println("mian-gg");
	}
}

练习:1-100累加 输出 1-100 内的奇数和偶数 求出所有的水仙花数


/**
 * @author Amanda
 *	1-100累加
	输出 1-100 内的奇数和偶数  并对偶数求和
	求出所有的水仙花数
 */
public class Test {
	public static void main(String[] args){
		sum();
		printWord();
		Narcissus();
		System.out.println("mian-gg");
	}

	private static void Narcissus() {
		// 水仙花数  某个三位数的 个位 十位 百位 各取立方 , 它们的和等于自身
		int i = 100;
		int x,y,z;
		while(i < 1000){
			x = i / 1 % 10;
			y = i / 10 % 10;
			z = i / 100 % 10;
			
//			if((x^3 + y^3 + z^3) ==i)   //^为异或,应用Math.pow(a, b)方法,a的b次幂
//			if( x*x*x + y*y*y + z*z*z == i)  //方法1
			if(Math.pow(x, 3) + Math.pow(y, 3) + Math.pow(z, 3) == i)  //方法2
				System.out.println(i);
			i++;
		}
		
	}

	private static void printWord() {
		// TODO Auto-generated method stub
		int sum = 0;
		int sum1 = 0;
		int y = 1;
		while(y <= 100){
			if(y % 2 == 0){
				System.out.println("偶数" + y);
				sum += y;
			}else{
				System.out.println("奇数.." + y);
				sum1 += y;
			}
			y++;
		}
		System.out.println("偶数和为:" + sum);
		System.out.println("奇数和为:" + sum);
	}

	private static void sum() {
		// TODO Auto-generated method stub
		int i = 1;
		int sum = 0;
		while( i <= 100){
			sum += i;
			i++;
		}
		System.out.println("sum = " + sum);
	}
}

.

do-while循环

在这里插入图片描述
语法结构

do{
    //循环体;
    //步进语句;
}while(布尔值); //分号不能省

执行流程:
当程序执行到 dowhile时 , 它们是一个整体 ;
程序会首先执行 大括号的内容 , 这是循环体 ;
然后进行条件判断 , 如果小括号的值
为假 : 结束循环 程序继续向下走 (1)
为真 : 执行循环体一次 , 循环体整体结束了 , 再到条件判断处进行条件判断 (2)
为假 :(1)
为真 :(2)

注意: do while 循环保证了循环体至少被执行一次

例:

public static void main(String[] args) {
		// do-while循环
		int i = 10; //循环初始条件
		do{ //进入循环体
			System.out.println("loop:" + i);
			i--; //步进语句
		}while(i < 0); //执行一次循环体后才判断条件

	}

练习:1-200的累加

public static void main(String[] args) {
		// do-while循环
		int i = 1; //循环初始条件
		int sum = 0;
		do{ //进入循环体
			System.out.println(i);
			sum += i;
			i++; //步进语句
		}while(i <= 200); //执行一次循环体后才判断条件
		System.out.println("sum = " + sum);
	}

for循环

在这里插入图片描述
语法格式:

for(初始化语句;循环条件(布尔值);循环步进语句(++或--)){
    //循环执行体
}

执行流程:
第一步:初始化语句;该语句只在循环开始前执行一次,在此处可以声明一个或多个同类型的变量,作用域只在for中
第二步:每次执行循环体前,先判断循环条件的值,如果循环条件为真,则进入第三步,条件为假则进入第五步;
第三步:执行循环体一次;
第四步:执行循环步进语句(表达式3)后进入第二步;
第五步:结束循环;

联系:1-100的累加

public static void main(String[] args){
		int sum = 0;
		for(int i = 0; i <= 100;i++){
			sum += i;
		}
		System.out.println("sum = " + sum);
	}

练习: for输出1-100 , 奇数偶数分别添加标识

/**
 * for输出1-100 , 奇数偶数分别添加标识
 * @author Acer
 *
 */
public class TestOddEven {
	public static void main(String[] args){
		for(int i = 1; i <= 100;i++){
			if(i % 2 == 0)
				System.out.println("偶数" + i);
			else{
				System.out.println("..奇数" + i);
			}
		}
	}
}

for循环省略

  1. 大括号可以省略 但是省略之后只对之后第一条语句产生作用
  2. 表达式1 可以省略 , 省略之后 , 往往放在for循环之前 , 如无特殊需求最好不这么写
  3. 表达式3 可以省略 , 省略之后会写在 循环体中
  4. 达式2 , 即条件也可以省略 , 但是省略之后会更复杂 往往要在循环体中 增加 if和break 结合 营造出循环的出口
		int i = 1;
		for(;;){
			if(i == 101)
				break;
			System.out.println(i++);
		}

练习:完成一个功能 , 键盘录入用户名 , 用户名必须是 100-10000 之间的数字 ,用户可能录入失败 , 那么让他再度录入 直至成功;


import java.util.Scanner;

/**
 * 完成一个功能 , 键盘录入用户名 用户名必须是 100-10000 之间的数字 用户可能录入失败 , 那么让他再度录入 直至成功
 * @author Amanda
 */
public class UserInfo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		boolean b = true;

		/*// 使用 常量 + break 来解决问题
		for (;;) {
			System.out.println("请录入100-10000之间的用户名");
			int next = sc.nextInt();
			if (100 <= next && next <= 10000)
				break;
			else 
				System.out.println("不合法");
		}
		System.out.println("录入了合法的用户名");*/
		
		//使用变量完成改功能
		while(b){
			System.out.println("请录入100-10000之间的用户名");
			int next = sc.nextInt();
			if(100 <= next && next <= 10000)
				b = false;
			else
				System.out.println("不合法");
		}
		System.out.println("录入了合法的用户名");
		
	}
}

**

操作循环的关键字

**

使用break结束循环 break可以终止循环 和 switch语句的运行

break用于结束一个循环,即跳出循环体,执行循环体之后的代码;

/**
 * break用于结束一个循环,即跳出循环体,执行循环体之后的代码
 * @author Amanda
 *
 */
public class TestBreak {
	public static void main(String [] args){
		//break 语句的应用 break用于结束循环,执行循环体后面的语句
		for(int i = 1; i <= 5; i++){
			if(i == 4) break;//当满足条件是,跳出整个循环体,执行输出语句Hello
			System.out.println("i = " + i);
		}
		System.out.println("Hello!");
	}
}

使用continue提前结束本次循环

/**
 * 使用continue提前结束本次循环
 * @author Acer
 *
 */
public class TestContinue {
	public static void main(String[] args){
		//测试continue语句的应用 continue终止本次循环,不跳出整个循环体,继续下次循环
		for(int i = 1; i <= 5; i++){
			if(i == 3) continue; //结束本次循环 但还是会开始下一次循环
			System.out.println("i = " + i);
		}
	}
}

continue与break的区别:
在这里插入图片描述

使用return结束方法

return关键字不是专门用于结束循环,return的功能时结束一个方法。当一个方法遇到return语句时,这个方法将被结束。
方法结束 , 执行权回到方法调用处 ;

public class TestReturn {

	/**
	 * 使用return结束方法
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i = 0;i < 5;i++){
			if(i == 2){
				return; //结束方法
			}
			System.out.println(i);
		}
		System.out.println("main方法");
	}

}

嵌套循环:

把一个循环放到另一个循环体内,就形成了嵌套循环;
嵌套循环:各种类型的循环都可以作为外层循环或内层循环
执行流程 : 外循环执行一次 , 内循环执行全部 ; 内循环就是外循环的循环体的一部分 ;

/**
 * 把一个循环放到另一个循环体内,就形成了嵌套循环;
 * @author Amanda
 * 执行流程 :  外循环执行一次  ,  内循环执行全部 ;   内循环就是外循环的循环体的一部分 ;
 */
public class NestedLoop {
	public static void main(String[] args){
		//嵌套循环
		for(int line = 0;line < 5; line++){//外层循环控制行数
			for(int space = 0;space < (5 - 1 - line);space++){//内层循环控制列数,打印空格
				System.out.print(" ");
			}
			for(int star = 0;star < (line + 1); star++){//内层训话控制列数,打印*号
				System.out.print("*");
			}
			System.out.println();//打印完每行后进行换行
		}
	}
}


使用break continue 只能控制单层循环 , 如果出现在嵌套循环的内循环中 , 那么操作的就是内循环 ;
break continue 不仅可以结束其所在循环,还可以直接结束外层循环。
此时需要在break continue 后紧跟一个标签,借助于标签可以操作一个外层循环。
Java中的标签就是 标识符+冒号 ,只有放在循环语句之前才有作用。

public class test02 {

	/**
	 * 标签:标识符+:
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
test:		for(int i = 1;i < 10; i++){
			for(int j = 1; j <= i;j++){
				if(j == 3)
					break test; //使用的时候 在外面加上标签的名字
				System.out.print(i + "*" + j + "=" + (i * j) + "\t");
			}
			System.out.println();
		}
	}

}

案例:

/**
	 * int 值  转  二进制
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i = 31;
		int num = 127;
		while(i >= 0){
			System.out.println(num >> i-- & 1);
		}
	}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值